使用 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 和私有方法的某个地方,我将需要找到一些更复杂的检查。