pydoc/help()能隐藏继承类的方法和属性文档吗?
当你声明一个类,并且这个类是从另一个特定的类继承而来的时候:
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文件中添加三行代码。下面是具体步骤:
- 先复制一份Lib\pydoc.py文件。
在这个文件里找到
inherited
变量出现的地方(我数了一下,总共出现了3次),然后在它被定义后面设置为空列表。比如,我在第809行看到了:attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass)
然后在它下面新的一行写上inherited = []
。
这样就不会再打印出继承的方法了。
1
pydoc
和内置的help
功能不支持这个,但你完全可以自己写一个工具(也许可以通过修改pydoc的源代码)来实现你想要的功能。你只需要遍历类的字典,找到本地定义的属性,然后查找那些有doc属性的东西。