Функции документа, унаследованные от сгенерированного класса
У меня есть фабрика классов, которая генерирует класс с функцией, связанной с другим классом. Когда класс наследует от сгенерированного класса, он получает соответствующую функцию. Теперь я хочу задокументировать функцию сгенерированного класса, иначе нужно будет проверить фабрику классов, чтобы увидеть, что делает функция, или документация фабрики классов должна описать все функции сгенерированного класса.
Фабрика класса:
def greeter(name):
"""Generate a greeter for the given name."""
class Greeter(object):
def greet(self):
print('Hello {}.'.format(name))
greet.__doc__ = "Greet someone by the name of {!r}".format(name)
return Greeter
Это использование:
class GreetArthur(greeter('Arthur')):
pass
GreetArthur().greet() # Prints 'Hello Arthur.'
Теперь, когда это документируется Sphinx, становится ясно, что GreetArthur
наследуется от Greeter
, но Greeter
никогда не документируется, потому что он генерируется. Из документации, таким образом, не ясно, что GreetArthur
имеет функцию greet
,
greeter(name)
Generate a greeter for the given name.
class GreetArthur
Bases: Greeter
Желаемый результат:
greeter(name)
Generate a greeter for the given name.
class GreetArthur
Bases: Greeter
greet()
Greet someone by the name of 'Arthur'.
2 ответа
Выглядит как :inherited-members:
делает трюк. Это работает как для :automodule:
а также :autoclass:
,
.. automodule:: greet
:members:
:inherited-members:
или же
.. autoclass:: greet.GreetArthur
:members:
:inherited-members:
Это приведет к:
class greet.GreetArthur
greet()
Greet someone by the name of 'Arthur'.
В соответствии с документацией sphynx autodoc пустая опция:members: для автокласса выглядит так, как будто она должна сработать. Если нет, то вам может потребоваться предоставить реализацию Greeter на уровне модуля, а не скрывать ее внутри фабричного закрытия, чтобы sphynx мог видеть ее при импорте модуля для поиска строк документации.