使用sphinx的autodoc对属性进行Docstring继承

时间:2011-04-01 16:15:19

标签: python python-sphinx autodoc

我有一个这样的课程:

class MyBase(object):
   x = 3
   """Documentation for property x"""

和另一个继承它的类:

class MyObj(MyBase):
   x = 0

当我使用sphinx的autodoc生成文档时,MyObj.x没有记录。有没有办法从MyBase.x继承文档字符串?我发现DocInherit但由于它使用了一个装饰器,它只适用于类方法。用属性做任何方法吗?

4 个答案:

答案 0 :(得分:5)

我找到了使用属性函数的解决方法:

class MyBase(object):
   _x = 3
   x = property( lambda s: s._x, doc="Documentation for property x")

class MyObj(MyBase):
   _x = 0

在给定实例变量的情况下,这很好:

>>> m = MyObj()
>>> m.x
0

可以致电help(m)并获取有关属性x的正确文档,sphinx也会正确选择。

答案 1 :(得分:4)

据我所知,属性的docstrings不是Python的一部分。当我尝试它时,MyBase.x.__doc__不会被设置为它下面的字符串。 Docstrings仅适用于类,函数和方法。如果Sphinx选取x = 3下面的字符串作为文档字符串,它可能会自己处理源代码以获得它。

答案 2 :(得分:3)

如果您只关心通过Sphinx构建文档。您可以使用: ":继承会员:"

.. autoclass :: Noodle    :成员:    :继承会员:

这也将在Sphinx文档中添加继承成员的doc字符串。

http://sphinx-doc.org/ext/autodoc.html

答案 3 :(得分:1)

正如托马斯已经说过的,属性在Python中没有文档字符串。然而,Sphinx提供了自己的处理,允许记录属性。

class Test(object):
    #: This is an attibute docstring.
    test_attr = 'test'

    @property
    def test_prop(self):
        """This is a property docstring."""

这导致:

class Test
    Bases: object

    test_attr = 'test'
        This is an attibute docstring.

    test_prop
        This is a property docstring.