如何使用 Sphinx 的 autodoc 来记录类的 __init__(self) 方法?
默认情况下,Sphinx 不会为 __init__(self) 生成文档。我已尝试以下操作:
.. automodule:: mymodule
:members:
并且
..autoclass:: MyClass
:members:
在conf.py中,设置以下内容仅将 __init__(self) 文档字符串附加到类文档字符串(Sphinx autodoc文档似乎同意这是预期的行为,但没有提到我试图解决的问题):
autoclass_content = 'both'
Sphinx doesn't generate docs for __init__(self) by default. I have tried the following:
.. automodule:: mymodule
:members:
and
..autoclass:: MyClass
:members:
In conf.py, setting the following only appends the __init__(self) docstring to the class docstring (the Sphinx autodoc documentation seems to agree that this is the expected behavior, but mentions nothing regarding the problem I'm trying to solve):
autoclass_content = 'both'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
以下是三种替代方案:
要确保
__init__()
始终被记录,您可以使用 conf.py 中的autodoc-skip-member
。像这样:这明确定义了不被跳过的
__init__
(默认情况下)。此配置指定一次,并且不需要为 .rst 源中的每个类进行任何额外标记。特殊成员
< /a> 选项在 Sphinx 1.1 中添加 。它使“特殊”成员(名称如__special__
的成员)由 autodoc 记录。自 Sphinx 1.2 起,此选项采用参数,这使得它比以前更有用。
使用
自动方法
:必须为每个类添加此内容(不能与
automodule
一起使用,如对此答案的第一个修订版的评论中所指出的那样)。Here are three alternatives:
To ensure that
__init__()
is always documented, you can useautodoc-skip-member
in conf.py. Like this:This explicitly defines
__init__
not to be skipped (which it is by default). This configuration is specified once, and it does not require any additional markup for every class in the .rst source.The
special-members
option was added in Sphinx 1.1. It makes "special" members (those with names like__special__
) be documented by autodoc.Since Sphinx 1.2, this option takes arguments which makes it more useful than it was previously.
Use
automethod
:This has to be added for every class (cannot be used with
automodule
, as pointed out in a comment to the first revision of this answer).你很接近。您可以使用
autoclass_content
<conf.py
文件中的 /a> 选项:You were close. You can use the
autoclass_content
option in yourconf.py
file:尽管这是一篇较旧的文章,但对于那些现在正在查找它的人来说,1.8 版本中还引入了另一种解决方案。根据文档,您可以将
autodoc_default_options
中的special-members
键添加到conf.py
中。例子:
Even though this is an older post, for those who are looking it up as of now, there is also another solution introduced in version 1.8. According to the documentation, You can add the
special-members
key in theautodoc_default_options
to yourconf.py
.Example:
在过去的几年里,我为各种不相关的 Python 项目编写了
autodoc-skip-member
回调的几个变体,因为我想要像__init__()
、__enter__( )
和__exit__()
显示在我的 API 文档中(毕竟,这些“特殊方法”是 API 的一部分,还有什么地方比在特殊方法的文档字符串中记录它们更好呢? )。最近,我采用了最好的实现,并将其作为我的 Python 项目之一的一部分(这是文档)。 实现基本上可以归结为:
是的,文档多于逻辑:-)。与使用
special-members
选项(对我来说)相比,定义这样的autodoc-skip-member
回调的优点是special-members< /code> 选项还可以启用诸如
__weakref__
(在所有新式类上可用,据我所知)之类的属性的文档,我认为这些属性是噪音并且根本没有用。回调方法避免了这种情况(因为它仅适用于函数/方法并忽略其他属性)。Over the past years I've written several variants of
autodoc-skip-member
callbacks for various unrelated Python projects because I wanted methods like__init__()
,__enter__()
and__exit__()
to show up in my API documentation (after all, these "special methods" are part of the API and what better place to document them than inside the special method's docstring).Recently I took the best implementation and made it part of one of my Python projects (here's the documentation). The implementation basically comes down to this:
Yes, there's more documentation than logic :-). The advantage of defining an
autodoc-skip-member
callback like this over the use of thespecial-members
option (for me) is that thespecial-members
option also enables documentation of properties like__weakref__
(available on all new-style classes, AFAIK) which I consider noise and not useful at all. The callback approach avoids this (because it only works on functions/methods and ignores other attributes).只要此提交获得批准: https://github.com/sphinx-doc/sphinx /pull/9154,在下一个 sphinx 版本(>4.1.2)中将可以:
As long as this commit approved: https://github.com/sphinx-doc/sphinx/pull/9154, in the next sphinx version (>4.1.2) will be possible to:
这是一个变体,仅在有参数时才包含
__init__
:This is a variant which only includes
__init__
if it has arguments: