Sphinx默认情况下不会为__init __(self)生成文档。我尝试了以下方法:
.. automodule:: mymodule
:members:
和
..autoclass:: MyClass
:members:
在conf.py中,设置以下内容只会将__init __(self)文档字符串附加到类文档字符串(Sphinx autodoc文档似乎同意这是预期的行为,但未提及我要解决的问题):
autoclass_content = 'both'
Sphinx默认情况下不会为__init __(self)生成文档。我尝试了以下方法:
.. automodule:: mymodule
:members:
和
..autoclass:: MyClass
:members:
在conf.py中,设置以下内容只会将__init __(self)文档字符串附加到类文档字符串(Sphinx autodoc文档似乎同意这是预期的行为,但未提及我要解决的问题):
autoclass_content = 'both'
Answers:
这是三种选择:
为了确保__init__()
始终记录autodoc-skip-member
在文档中,可以在conf.py中使用。像这样:
def skip(app, what, name, obj, would_skip, options):
if name == "__init__":
return False
return would_skip
def setup(app):
app.connect("autodoc-skip-member", skip)
这明确定义了__init__
不被跳过(默认情况下为跳过)。仅一次指定此配置,并且.rst源中的每个类都不需要任何其他标记。
该special-members
选项已在Sphinx 1.1中添加。它使“特殊”成员(名称如的成员__special__
)由autodoc记录。
从Sphinx 1.2开始,此选项接受参数,这使其比以前更有用。
用途automethod
:
.. autoclass:: MyClass
:members:
.. automethod:: __init__
这必须为每个类添加(不能与一起使用automodule
,如对此答案的第一个修订版的注释中指出的那样)。
special-members
使用可以正常工作automodule
。使用:special-members: __init__
只记录__init__
。
你近了 您可以autoclass_content
在conf.py
文件中使用该选项:
autoclass_content = 'both'
autoclass_content = 'both'
选项,该选项的确记录了init方法,但它使自动摘要出现了两次。
在过去的几年中,我autodoc-skip-member
为各种不相关的Python项目编写了多种回调类型,因为我希望使用诸如之类的方法__init__()
,__enter__()
并将__exit__()
其显示在我的API文档中(毕竟,这些“特殊方法”是API的一部分,还有什么更好的地方记录它们,而不是在特殊方法的文档字符串中记录它们。
最近,我采用了最佳的实现,并将其纳入了我的Python项目之一(这是文档)。实现基本上可以归结为:
import types
def setup(app):
"""Enable Sphinx customizations."""
enable_special_methods(app)
def enable_special_methods(app):
"""
Enable documenting "special methods" using the autodoc_ extension.
:param app: The Sphinx application object.
This function connects the :func:`special_methods_callback()` function to
``autodoc-skip-member`` events.
.. _autodoc: http://www.sphinx-doc.org/en/stable/ext/autodoc.html
"""
app.connect('autodoc-skip-member', special_methods_callback)
def special_methods_callback(app, what, name, obj, skip, options):
"""
Enable documenting "special methods" using the autodoc_ extension.
Refer to :func:`enable_special_methods()` to enable the use of this
function (you probably don't want to call
:func:`special_methods_callback()` directly).
This function implements a callback for ``autodoc-skip-member`` events to
include documented "special methods" (method names with two leading and two
trailing underscores) in your documentation. The result is similar to the
use of the ``special-members`` flag with one big difference: Special
methods are included but other types of members are ignored. This means
that attributes like ``__weakref__`` will always be ignored (this was my
main annoyance with the ``special-members`` flag).
The parameters expected by this function are those defined for Sphinx event
callback functions (i.e. I'm not going to document them here :-).
"""
if getattr(obj, '__doc__', None) and isinstance(obj, (types.FunctionType, types.MethodType)):
return False
else:
return skip
是的,文档比逻辑更多:-)。autodoc-skip-member
相对于使用special-members
选项(对我而言)定义这样的回调的好处是,该special-members
选项还可以记录属性__weakref__
(例如,在所有新样式类AFAIK上可用)的文档,而我认为这些属性根本没有用。回调方法避免了这种情况(因为它仅适用于函数/方法,而忽略其他属性)。
setup(app)
由Sphinx执行。
__init__
方法具有非空文档字符串。可以?
这是一个变体,仅__init__
当具有参数时才包括:
import inspect
def skip_init_without_args(app, what, name, obj, would_skip, options):
if name == '__init__':
func = getattr(obj, '__init__')
spec = inspect.getfullargspec(func)
return not spec.args and not spec.varargs and not spec.varkw and not spec.kwonlyargs
return would_skip
def setup(app):
app.connect("autodoc-skip-member", skip_init_without_args)
"both" Both the class’ and the __init__ method’s docstring are concatenated and inserted.
为止,这还不是文档编写的内容:->因此,__init__(self)
如果有的话,它不仅应该是,还应该是文档字符串类。您能提供一个测试用例,因为如果是这样,感觉就像是个错误,对吗?