pydoc/help()能隐藏继承类的方法和属性文档吗?

6 投票
3 回答
3301 浏览
提问于 2025-04-15 22:50

当你声明一个类,并且这个类是从另一个特定的类继承而来的时候:

class C(dict):
    added_attribute = 0

C 的文档会列出所有来自 dict 的方法(你可以通过 help(C)pydoc 来查看)。

有没有办法在自动生成的文档中隐藏那些继承来的方法呢?(文档字符串可以提到基类,对于那些没有被重写的方法)?或者说这是不可能的?

这样做是有好处的:pydoc 会在模块的类之后列出定义的函数。因此,当类的文档很长时,会在模块提供的新函数之前打印出很多不太有用的信息,这样就让文档变得更难用(你得跳过所有继承方法的文档,才能看到与当前模块相关的内容)。

3 个回答

1

你可以给你的类设置一个元类,通过一个特殊的方法 __dir__ 来返回它自己的属性列表。Pydoc 会使用这个列表。

注意事项:

  • 这也会影响 dir() 的行为。
  • 在极少数情况下,使用元类可能会打开一个通往地狱维度的门户。
3

我之前也遇到过同样的问题,在Windows的Python 2.7.6上解决了这个问题,只需在pydoc.py文件中添加三行代码。下面是具体步骤:

  1. 先复制一份Lib\pydoc.py文件。
  2. 在这个文件里找到inherited变量出现的地方(我数了一下,总共出现了3次),然后在它被定义后面设置为空列表。比如,我在第809行看到了:

    attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass)

然后在它下面新的一行写上inherited = []

这样就不会再打印出继承的方法了。

1

pydoc和内置的help功能不支持这个,但你完全可以自己写一个工具(也许可以通过修改pydoc的源代码)来实现你想要的功能。你只需要遍历类的字典,找到本地定义的属性,然后查找那些有doc属性的东西。

撰写回答