python-sphinx - 仅使用 Sphinx 的 Autodoc 显示私有方法
问题描述
这里有几个关于使用 Autodoc 显示私有方法的问题,但我没有看到关于只显示私有方法的任何内容。
私有方法和常规方法可以如下所示:
.. autoclass:: my_package.my_file.MyClass
:members:
:private-members:
但是,删除: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 必须决定是否在文档中包含成员时(只要指令的主题包含该成员,它就会这样做),调用此函数。该函数返回一个布尔值,表示是否应该跳过该成员。如果True
,则不会出现。如果False
,它确实如此。如果None
,则忽略此函数的结果并调用下一个跳过检查方法。
如果指令包含选项:private-members:
并且成员名称不以_
(即它是一个公共方法)开头,它会被跳过并且不会出现在文档中。
因此,当我使用以下方法生成文档时:
.. autoclass:: my_package.my_file.MyClass
:members:
:private-members:
公共方法未显示,私有方法显示。
不过,我仍然需要设置:members:
,否则这个检查甚至不会首先发生。如果我发现我确实需要列出公共和私有方法的地方,我需要找到一些更复杂的检查。
推荐阅读
- ruby-on-rails - 编写 ActiveRecord/AREL 查询以选择最多用户持有的硬币
- android - Context Menu (Popup Menu) Layout Height Api 24
- ember.js - Possible to guarantee ember-cli addon hook run order?
- php - PHP Bug with the assignment operator in a loop?
- javascript - 如何让屏幕阅读器阅读列表?
- recursion - iOS RxSwift 如何从 Observable.of(1,2,3) 中“拉”?
- amazon-web-services - 尝试使用已禁用的网络接口连接到 AWS EC2 实例
- firebase - 如何在 viewdidload 之前从 firebase 获取数据
- angular - 使用路由组织 Angular 功能模块及其子模块
- html - Angular 6:嵌套
- 使用 *ngFor Angular 标签的表现非常糟糕