我试图用Sphinx记录一个Python项目,但是我在将autodoc
扩展与namedtuple
生成的类组合时遇到了麻烦。
在一份文件中,gammatone.rst
,我有:
:mod:`gammatone` -- gammatone filterbank toolkit
================================================
.. automodule:: gammatone
:members:
.. automodule:: gammatone.coeffs
:members:
在我的gammatone/coeffs.py
,我有:
from collections import namedtuple
ERBFilterCoeffs = namedtuple(
'ERBFilterCoeffs', # Most parameters omitted
[
'A0',
'gain',
])
namedtuple
生成的代码包含非常通用的文档字符串,Sphinx的autodoc
模块包含这些文档字符串。我宁愿自己正确地记录课程,而不是为模块的其余部分放弃autodoc
。
我在课前尝试过这样的东西:
"""
.. class:: ERBFilterCoeffs(A0, gain)
:param A0: A0 coefficient
:param gain: Gain coefficient
Magic coefficients.
"""
...但它没有出现在生成的文档中。将它放在类之后导致它嵌套在泛型类文档下面,而不是替换它。
我如何简单地告诉Sphinx(以及autodoc
扩展名)使用我的文档用于ERBFilterCoeffs
类而不是namedtuple
生成的文档?
在使用namedtuple定义ERBFilterCoeffs
后,尝试将该文档字符串分配给ERBFilterCoeffs.__doc__
?
编辑:好的,那么这个怎么样:
class ERBFilterCoeffs(namedtuple('ERBFilterCoeffs','a b c')):
"""
this is the doc string for ERBFilterCoeffs
"""
实际上你根本不需要扩展namedtuple。您可以将docstring放在namedtuple之后。这实际上也适用于常量和属性。
ERBFilterCoeffs = namedtuple('ERBFilterCoeffs', ['A0', 'gain', ])
""" Magic coefficients.
.. py:attribute:: A0
The A0 attribute is something
.. py:attribute:: gain
The gain attribute is blah blah
"""
一般来说,我更喜欢对生成的内容进行更好的控制,而不是在:members:
中添加automodule
指令。因此,我建议使用ERBFilterCoeffs
明确记录.. autoclass:: ERBFilterCoeffs
。我不会在这里添加:members:
指令,因为这将包括namedtuple
为每个字段创建的非常通用的默认文档。相反,我会在你的docstring中使用.. py:attribute:: ...
元素,你可以使用特殊的#:
注释放在类定义之前:
#: Magic coefficients.
#:
#: .. py:attirbute:: A0
#:
#: A0 coefficient
#:
#: .. py:attribute:: gain
#:
#: Gain coefficient
ERBFilterCoeffs = namedtuple(
'ERBFilterCoeffs', [# Most parameters omitted
'A0',
'gain',
]
)