我有一个这样的课程:
class MyBase(object):
x = 3
"""Documentation for property x"""
和另一个继承它的类:
class MyObj(MyBase):
x = 0
当我使用sphinx的autodoc生成文档时,MyObj.x
没有记录。有没有办法从MyBase.x
继承文档字符串?我发现DocInherit但由于它使用了一个装饰器,它只适用于类方法。用属性做任何方法吗?
答案 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字符串。
答案 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.