#python #python-sphinx #metaclass #autodoc
Вопрос:
Метакласс:
class RequestMeta(type):
def __new__(mcs, what, bases, attrs):
_attrs = {name: decimal_to_string(attr) if callable(attr) else attr for name, attr in attrs.items()}
return super().__new__(mcs, what, bases, _attrs)
Когда мы импортируем RequestMeta для метакласса, Sphinx не может генерировать участников:
Class_name(metaclass=RequestMeta)
def test
"""
Get test
:return:
.. code-block:: json
[
{
"message":"test",
"timestamp": 123
}
]
"""
тест.первый:
Test
____
.. autoclass:: my_prog.a.Class_name
:members:
Комментарии:
1. Попробуйте вставить пустую строку между возвращением и блоком кода.
2. «пустая строка» никогда не будет иметь никакого значения в любом коде Python, кроме предупреждений линтера. (и не в этом случае)
Ответ №1:
Проблема, скорее всего, кроется в вашем decimal_to_string
декораторе. Сфинксу будет наплевать на метакласс, но если при оформлении функции вы лишите ее атрибутов, он ничего не сможет сделать.
Проверьте, включает ли decimal_to_string
он свою целевую функцию functools.wraps
— это, скорее всего, решит вашу проблему.
Комментарии:
1. функции. обертывания — работают!!! Спасибо! Проблема была с @декоратором в метаклассе