使用 Sphinx 的 Autodoc 仅显示私有方法
Showing only private methods with Sphinx' Autodoc
这里有几个关于使用 Autodoc 显示私有方法的问题,但我没有看到任何关于显示 仅 私有方法的信息。
私有方法和常规方法如下所示:
.. autoclass:: my_package.my_file.MyClass
:members:
:private-members:
但是,删除 :members:
会导致显示 none 个方法。
我怎样才能只显示私有方法,并且只显示这个指令?
找到方法了!
使用此处详述的 Skipping Members 设置,我能够定义一个规则来有选择地跳过成员。
在conf.py中:
def hide_non_private(app, what, name, obj, skip, options):
# if private-members is set, show only private members
if 'private-members' in options and not name.startswith('_'):
# skip public methods
return True
else:
# do not modify skip - private methods will be shown
return None
def setup(app):
app.connect('autodoc-skip-member', hide_non_private)
每当 autodoc 必须决定是否在文档中包含一个成员时(只要指令的主题包含该成员,它就会这样做),调用此函数。函数 returns 一个布尔值,表示是否应该跳过该成员。如果 True
,则不会出现。如果 False
,它会。如果 None
,则忽略此函数的结果并调用下一个跳过检查方法。
如果指令包含选项 :private-members:
并且成员名称不以 _
开头(即它是一个 public 方法),它将被跳过并且不会出现在文档。
因此,当我使用以下方法生成文档时:
.. autoclass:: my_package.my_file.MyClass
:members:
:private-members:
未显示public方法,显示私有方法。
不过,我仍然需要设置 :members:
,否则这个检查根本就不会发生。如果我发现我确实需要列出 public 和私有方法的某个地方,我将需要找到一些更复杂的检查。
这里有几个关于使用 Autodoc 显示私有方法的问题,但我没有看到任何关于显示 仅 私有方法的信息。
私有方法和常规方法如下所示:
.. autoclass:: my_package.my_file.MyClass
:members:
:private-members:
但是,删除 :members:
会导致显示 none 个方法。
我怎样才能只显示私有方法,并且只显示这个指令?
找到方法了!
使用此处详述的 Skipping Members 设置,我能够定义一个规则来有选择地跳过成员。
在conf.py中:
def hide_non_private(app, what, name, obj, skip, options):
# if private-members is set, show only private members
if 'private-members' in options and not name.startswith('_'):
# skip public methods
return True
else:
# do not modify skip - private methods will be shown
return None
def setup(app):
app.connect('autodoc-skip-member', hide_non_private)
每当 autodoc 必须决定是否在文档中包含一个成员时(只要指令的主题包含该成员,它就会这样做),调用此函数。函数 returns 一个布尔值,表示是否应该跳过该成员。如果 True
,则不会出现。如果 False
,它会。如果 None
,则忽略此函数的结果并调用下一个跳过检查方法。
如果指令包含选项 :private-members:
并且成员名称不以 _
开头(即它是一个 public 方法),它将被跳过并且不会出现在文档。
因此,当我使用以下方法生成文档时:
.. autoclass:: my_package.my_file.MyClass
:members:
:private-members:
未显示public方法,显示私有方法。
不过,我仍然需要设置 :members:
,否则这个检查根本就不会发生。如果我发现我确实需要列出 public 和私有方法的某个地方,我将需要找到一些更复杂的检查。