我正在使用Sphinx自动摘要功能,为我的模块中的每个成员自动生成单独的rst文件。文档已按预期创建,但是生成的rst文件缺少所有dunder方法,除了__init__
之外。
在我的conf.py
中,我有以下代码:
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.autosummary',
]
autosummary_generate = True
autosummary_imported_members = True
考虑下面的虚拟类,该类包含下划线方法和常规公共方法:
class MyClassA:
def __init__(self):
r'__init__ docstring'
pass
def __call__(self):
r'__call__ docstring'
pass
def __len__(self):
r'__len__ docstring'
pass
def public_method_1(self):
r'public_method_1 docstring'
pass
def public_method_2(self):
r'public_method_2 docstring'
pass
在我的主要rst文件中,我按照以下方式设置了自动摘要:
.. autosummary::
:toctree: my_module_members
my_module.MyClassA
my_module.MyClassB
如预料的那样,autosummary会创建一个名为/my_module_members
的子目录,在其中为模块的每个成员创建单独的rst文件。但是,在这些自动生成的rst文件的方法部分中,只有__init__
被列出。例如:
my_module.MyClassA
==================
.. currentmodule:: my_module
.. autoclass:: MyClassA
.. rubric:: Methods
.. autosummary::
~MyClassA.__init__
~MyClassA.public_method_1
~MyClassA.public_method_2
因此,在生成的HTML文档中,方法表中只列出了这三种方法,而没有列出“__call__”和“__len__”:
所以我的问题是:如何在使用autosummary时包含所有特殊方法?
.. automethod:: __init__
的原因,我主要在类文档字符串中编写大部分文档,因此我更喜欢省略它。关于您的建议,在我的模板中使用{% for item in all_methods %}
就可以解决问题,但现在它列出了所有的 dunder 方法,包括继承的方法(甚至是从object
继承的方法),所以列表很长。实际上,我更希望在 autosummary 表格中只列出一些最重要的 dunder 方法,例如__call__
或__len__
。 - gilbertohasnofbautoclasstoc
,谢谢你的建议! - gilbertohasnofb