Python 使用sphinx';s autodoc
我有一门课是这样的:Python 使用sphinx';s autodoc,python,python-sphinx,autodoc,Python,Python Sphinx,Autodoc,我有一门课是这样的: class MyBase(object): x = 3 """Documentation for property x""" 以及继承它的另一个类: class MyObj(MyBase): x = 0 当我使用sphinx的autodoc生成文档时,MyObj.x没有文档。有没有办法从MyBase.x继承docstring?我发现,但由于它使用了装饰器,所以它只适用于类方法。有没有办法用属性来实现这一点?据我所知,属性的docstring不是Pyth
class MyBase(object):
x = 3
"""Documentation for property x"""
以及继承它的另一个类:
class MyObj(MyBase):
x = 0
当我使用sphinx的autodoc生成文档时,
MyObj.x
没有文档。有没有办法从MyBase.x
继承docstring?我发现,但由于它使用了装饰器,所以它只适用于类方法。有没有办法用属性来实现这一点?据我所知,属性的docstring不是Python的一部分。当我尝试它时,MyBase.x.\uuuuu doc\uuuuu
不会设置为它下面的字符串。docstring只对类、函数和方法起作用。如果Sphinx将x=3
下面的字符串作为docstring提取,则它可能正在对源代码进行自己的处理以获得该字符串。我使用属性函数找到了一个解决方法:
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也正确地识别了这一点。正如Thomas已经指出的,属性在Python中没有docstring。然而,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.
如果您只关心通过Sphinx创建文档。您可以使用:
“:继承的成员:”
这还将在Sphinx文档中添加继承成员的文档字符串
这让我觉得应该将property()
与doc
参数一起使用。看看我的答案。这有点难看,但我认为这可能是最好的方法,除非你有更好的建议。@jterrace:我当然不想为了添加docstring而把x变成一个带有getter的属性。我不认为有其他方法可以做到这一点,但我通常不使用docstring来保留属性,或者在类“docstring”中描述重要的属性。@Thomas-K:我同意,但另一种方法是复制docstring,这使得维护文档非常烦人。不要过多地猜测您,但是。。。您的文档具有继承树。为什么MyObj
的用户不单击链接转到父对象,然后在那里查看父对象的文档呢?这是一种可能性,但我认为将一个类的所有方法和属性(包括继承的方法和属性)放在一个页面上比查看其类型层次结构要好得多。
.. autoclass:: Noodle
:members:
:inherited-members: