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

calling help(MyClass) also shows base class attributes: how to avoid that?

MyClass 派生自 "list":MyClass(list) 我想很好地记录 MyClass 。 不幸的是,在尝试帮助(MyClass)时, 我有自己的文档,但我也有很多关于 "list".

的东西

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

感谢您的建议,

米歇尔

嗯,这就是 help 所做的。它会检查您的 class 并显示 class 中每个可调用属性的名称和关联的 __doc__,这是不可自定义的。

superclass的属性被认为是class的属性,并在自省Python的帮助中得到。

Metaclasses 甚至可以用来自定义当他在您的 class 上执行 "dir" 时获得的输出 - 但它们不会更改帮助文本的输出。要更改 "dir" 输出,请创建一个实现 __dir__ 方法的 metaclass,并 return 一个您希望 dir 输出可见的列表。

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

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

另一方面,为 list 属性显示的帮助内容并不那么冗长,而且实际上很有帮助 - 如果您覆盖任何方法来执行与描述不同的操作,则不正确的文本不会无论如何显示。所以你可能会忍受它。

另一个提示是,您可能更喜欢使用 subclass collections.abc.MutableSequence 而不是 subclassing list,并使用内部聚合(正常)列表来保留你的数据:这将需要你实现更少的方法来让你的 class 作为一个序列正常工作,并且在大多数情况下比 subclass 列表更可取。不过,这不会改变 help 的冗长程度。