1

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

类工厂:

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具有 function 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'.
4

2 回答 2

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'.
于 2013-12-31T09:26:38.107 回答
-1

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

于 2013-12-30T15:46:34.640 回答