Функции документа, унаследованные от сгенерированного класса

У меня есть фабрика классов, которая генерирует класс с функцией, связанной с другим классом. Когда класс наследует от сгенерированного класса, он получает соответствующую функцию. Теперь я хочу задокументировать функцию сгенерированного класса, иначе нужно будет проверить фабрику классов, чтобы увидеть, что делает функция, или документация фабрики классов должна описать все функции сгенерированного класса.

Фабрика класса:

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 мог видеть ее при импорте модуля для поиска строк документации.

Другие вопросы по тегам