如何在Sphinx Autodoc中隐藏Class2的类及__init__文档字符串?
解决Sphinx文档中Class2仅显示指定方法文档的问题
场景回顾
你需要实现:
- Class1:显示所有文档字符串(类文档、
__init__、所有方法) - Class2:仅显示
method方法的文档字符串,隐藏类本身文档和__init__文档
当前配置下Class2的类文档和__init__仍会显示,可通过以下两种方案解决:
方案1:直接在rst文档中配置(适合单个类的简单需求)
在index.rst中针对Class2精确指定要显示的成员,并排除不需要的部分:
# 显示Class1的所有文档 .. autoclass:: classes.Class1 :members: :undoc-members: # 仅显示Class2的method方法,排除__init__,并隐藏类文档 .. autoclass:: classes.Class2 :members: method :exclude-members: __init__ :no-docstring: # 隐藏类本身的文档字符串
注:no-docstring选项需要Sphinx版本≥4.1,如果版本较低,改用方案2。
方案2:自定义Sphinx事件处理器(灵活通用)
在conf.py中添加自定义逻辑,通过Sphinx的autodoc事件精准控制文档生成:
def filter_class_members(app, what, name, obj, skip, options): # 针对Class2,仅保留method方法 if what == "class" and obj.__name__ == "Class2": return name != "method" # Class1不做过滤,保留所有成员 elif what == "class" and obj.__name__ == "Class1": return False # 其他类保持默认规则 return skip def hide_class_doc(app, what, name, obj, options, lines): # 清空Class2的类文档字符串 if what == "class" and name == "Class2": lines.clear() def setup(app): # 注册成员过滤事件 app.connect('autodoc-skip-member', filter_class_members) # 注册类文档清理事件 app.connect('autodoc-process-docstring', hide_class_doc)
生效步骤
- 保存
conf.py修改 - 重新生成文档:
sphinx-build -b html 你的源码目录 你的输出目录
验证效果
重新生成后:
- Class1会完整展示类文档、
__init__方法文档及所有其他方法文档 - Class2仅显示
method方法的文档字符串,类本身和__init__的文档会被完全隐藏
内容的提问来源于stack exchange,提问作者pyjedy
相关产品推荐
相关产品推荐

