如何使Sphinx尊重使用__init__.py将类导入包中

时间:2014-02-28 13:13:33

标签: python python-sphinx

我有一个包裹:

  • FOO
    • foo.py
    • bar.py
    • __初始化__。PY

foo.py有一个Foo类。在__init__.py中我导入了类Foo,因此用户可以这样做:

from foo import Foo

Sphinx正确地将Foo记录为foo.foo.Foo,这是正确的,但却让用户感到困惑。如何让Sphinx将其记录为foo.Foo?

将整个模块文档与正确的模块相关联也很重要。

Sphinx记录了一些名为:

的文件
..module:: module.name

但是当我在foo.py文件的第一条评论中使用它时,该文档仍归于foo.foo

2 个答案:

答案 0 :(得分:2)

__module__属性的值是定义类/函数/方法的模块的名称(请参阅https://docs.python.org/2.7/reference/datamodel.html)。该属性是可写的,因此可以在__init __。py:

中重新定义
Foo.__module__ = "foo"

现在,如果您使用.. automodule:: fooFoo类的限定名称将在生成的模块文档中显示为foo.Foo


作为__module__的替代方法 - 您可以使用autoclass代替automodule

.. autoclass:: foo.Foo将生成所需的输出。

答案 1 :(得分:0)

请参阅 this 答案以获得解决方案。

在您的情况下,将您的 __init__.py 文件修改为:

# This lets you use foo.foo.Foo as foo.Foo in your code.
from .foo import Foo

# This lets Sphinx know you want to document foo.foo.Foo as foo.Foo.
__all__ = ['Foo']