Почему sphinx autodoc выводит строку документации декоратора, когда в методе есть два декоратора?
С помощью sphinx autodoc я хочу создать документацию для метода, который имеет @classproperty
а также @classmethod
декораторы. Вместо документации метода я получаю @classmethod
Документация. Если я удаляю один из декораторов, все работает правильно. Код класса структурирован, как показано ниже:
class Example(object):
@classproperty
@classmethod
def example_method(cls):
"""Method description"""
pass
Класс имущества, декоратор:
class classproperty(property):
def __get__(self, obj, type=None):
return self.fget.__get__(None, type)()
И я генерирую документацию, используя:
.. autoclass:: Example
:members:
0 ответов
Заметка
Если вы документируете декорированные функции или методы, имейте в виду, что autodoc извлекает свои строки документации путем импорта модуля и проверки атрибута doc данной функции или метода. Это означает, что если декоратор заменяет декорированную функцию другой, он должен скопировать исходный документ в новую функцию.
Начиная с Python 2.5, functools.wraps() можно использовать для создания хорошо оформленных функций декорирования.
Так что я думаю, что проблема в том, что ваш декоратор отбрасывает строку документации, когда оборачивает функцию. wraps
должен быть в состоянии помочь с этим.
Вы можете следовать шаблону из документации Python по этому вопросу. Для вашего случая использования вы можете сделать:
from functools import wraps
def classpropertymethod(f):
@wraps(f)
def wrapper(*args, **kwargs):
return classproperty(classmethod(f(*args, **kwargs)))
return wrapper
@classpropertymethod
def example_method(cls):
"""Method description"""
pass
Это должно получить документацию от example_method
прошло правильно.