如何在Sphinx autosummary中排除继承的类方法
解决Sphinx autosummary自动生成PyTorch nn.Module继承方法的问题
下面给你几个可行的解决方案:
方案一:用自定义钩子过滤继承方法
在Sphinx的conf.py里添加一段代码,专门跳过那些未被你重写的nn.Module原生方法,只保留你自己定义或重写的成员:
import torch.nn as nn def skip_nn_module_inherited_members(app, what, name, obj, skip, options): # 仅处理类方法 if what == "method": # 检查该方法是否为nn.Module的原生方法 if hasattr(nn.Module, name): # 若方法归属类不是nn.Module,说明是你重写的,保留 if obj.__qualname__ != getattr(nn.Module, name).__qualname__: return False # 否则是继承的原生方法,跳过 return True return skip def setup(app): app.connect('autodoc-skip-member', skip_nn_module_inherited_members)
方案二:给autosummary添加强制选项
你之前在autodoc_default_options中设置的inherited-members=False可能未被递归生成的模块继承,试试直接在autosummary块中添加该选项:
.. autosummary:: :toctree: generated/ :recursive: :inherited-members: False my_package
该配置会让所有递归生成的类都跳过继承成员。
方案三:更新Sphinx相关包
旧版本的Sphinx可能存在inherited-members选项不生效的兼容性问题,先把相关包更新到最新版:
pip install --upgrade sphinx sphinx-autodoc-typehints
最后记得清理缓存重建
修改配置后,先删除之前生成的文档缓存,再重新构建,避免旧缓存干扰:
make clean make html
内容的提问来源于stack exchange,提问作者dherrera
相关产品推荐
相关产品推荐

