从生成的类继承的文档函数

时间:2013-12-30 14:03:38

标签: python inheritance documentation python-sphinx class-factory

我有一个类工厂,它生成一个带有绑定到另一个类的函数的类。当一个类继承自生成的类时,它会获得适当的函数。现在我想记录生成的类'函数,否则我必须检查类工厂以查看函数的作用,或者类工厂的文档必须描述所有生成的类的函数。

班级工厂:

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 个答案:

答案 0 :(得分:0)

看起来: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'.

答案 1 :(得分:-1)

根据sphynx autodoc documentation,一个空的:member:autoclass选项看起来应该可以解决问题。如果没有,那么您可能需要在模块级别公开Greeter实现,而不是将其隐藏在工厂闭包中,以便sphynx在导入模块时可以看到它以查找文档字符串。