调用help(MyClass)还显示基类属性:如何避免这种情况?

时间:2017-10-18 13:45:08

标签: python-3.x documentation metaclass derived

MyClass派生自“list”:MyClass(列表) 我想很好地记录MyClass。 不幸的是,在尝试帮助时(MyClass), 我得到了自己的文档,但我也得到了很多关于“列表”的内容。

有没有一种简单的方法来控制它? 我读了一些关于元类的东西,但我无法做某事。

感谢您的建议,

米歇尔

1 个答案:

答案 0 :(得分:0)

嗯,这就是help的作用。它会对您的类进行内省,并为类中的每个可调用属性显示名称和关联的__doc__,并且不可自定义。

超类的属性被认为是类的属性,并且可以在内省Python的帮助中实现。

甚至可以使用元类来自定义当你在类上执行“dir”时获得的输出 - 但它们不会更改帮助文本的输出。要更改“dir”输出,请创建一个实现__dir__方法的元类,并返回一个您想要显示为dir输出的列表。

class M(type):
   def __dir__(self):
       return []  # blank dir contents

class MyList(list, metaclass=M):
   ...

另一方面,为list属性显示的帮助内容并不详细,实际上可能有用 - 如果您覆盖任何方法来执行与描述不同的操作,则不正确的文本将无法显示。所以你可能只是忍受它。

另一个提示是,您可能更喜欢将list子类化,而不是子类collections.abc.MutableSequence,并使用内部聚合(正常)列表来保存您的数据:这将要求您实现更少的数据让你的类作为一个序列正常工作的方法,在大多数情况下最好是子类列表。但这不会改变help的详细程度。