Sphinx未配置:private-members:仍展示类私有属性问题排查
根因说明
这个现象和:private-members:配置没有关系,属于sphinx.ext.napoleon的默认逻辑:
:private-members:的作用范围是autodoc自动扫描代码提取成员的流程,控制是否自动抓取下划线开头的私有成员加入文档- 你在类的docstring的
Attributes区块中手动编写了_private1、_private2两个私有属性的说明,napoleon解析NumPy格式docstring时,默认会完整渲染Attributes区块内的所有手写条目,不会自动过滤下划线开头的私有项,所以哪怕没开:private-members:,这两个条目也会显示出来。
可用解决方法
根据实际需求选一种即可:
- 方法1:修改napoleon配置,自动过滤docstring区块中的私有属性
在conf.py中添加如下配置项,让napoleon解析Attributes、Parameters等区块时自动跳过下划线开头的私有成员:
该配置仅影响napoleon解析docstring的逻辑,不会改动autodoc本身的成员抓取规则。napoleon_include_private_with_doc = False napoleon_include_special_with_doc = False - 方法2:直接移除公开docstring中的私有属性条目
如果私有属性不需要出现在对外文档里,把类docstring里_private1、_private2的说明删掉就行。未开启:private-members:时,autodoc不会主动从代码里抓取这两个私有属性渲染。 - 方法3:按需控制私有成员展示
如果有部分场景需要展示私有属性,可以保留docstring里的写法,仅在需要展示私有成员的automodule/autoclass指令中添加:private-members:选项即可。
当前复现的渲染效果:
内容的提问来源于stack exchange,提问作者LarrySnyder610
相关产品推荐
相关产品推荐

