在子类docstring中禁止“基类继承的方法”

时间:2018-06-03 19:58:52

标签: python inheritance ipython docstring

我正在使用大量方法和长文档字符串对类进行子类化。如果我调用IPython帮助函数,我会看到原始类的所有帮助。 我想这是预期的,有没有办法压制这个?我只想看到我重新定义的方法。

mymodule.py是:

import matplotlib.axes
class MySubclass(matplotlib.axes.Axes):
    pass

如果我在IPython中做的话:

import mymodule
help(mymodule)

打印输出很大,因为它包含所有“继承自matplotlib.axes._axes.Axes:的方法:”这是兆字节的文本,因为它列出了该类所有方法的文档字符串。

2 个答案:

答案 0 :(得分:1)

正如here所述,一种可行的解决方案是手动删除文档

## List the methods from the original class
method_list = [func for func in dir(mymodule.MySubclass) if \ 
  callable(getattr(mymodule.MySubclass, func))]

## Remove doc for methods
for func in method_list:
  ## Change only original user defined methods
  if ("_" not in el[0:2]):
    original_method = getattr(mymodule.MySubclass, func)
    setattr(original_method, "__doc__", "")
  else:
    pass

这可以很容易地封装在装饰器中,并在实例化子类或导入模块时调用。

答案 1 :(得分:0)

我能想到的唯一方法是,如果你在子类中创建基类中定义的所有函数并在其中创建自己的文档字符串,那么它们就可以被覆盖。你甚至可以留下空白的文档字符串,无论你喜欢什么,但是这将是非常不切实际的。