编程语言
首页 > 编程语言> > 如何有选择地覆盖python的帮助(MYclass)中的文本与更短和定制的东西?

如何有选择地覆盖python的帮助(MYclass)中的文本与更短和定制的东西?

作者:互联网

我正在学习编写用户友好的类和方法,我希望用户知道如何在终端中使用它们. Python的标准帮助(MYclass)返回我不想要的十八行,这是一个小窗口的半屏幕,那些刚学习python的人将失去与前一行从顶部消失的连续性.

有什么方法可以覆盖使用帮助(MYclass)(或帮助(MYmethod))显示的内容,以便它只显示(在这种情况下)单行文档字符串?

虽然有些IDE在泡沫中显示文档字符串,但终端不合作. (Do the triple-quoted (docstring) messages in Python appear while typing in IDEs other than IDLE?):

enter image description here

相反,我转而寻求帮助,但是对于所有这些额外的模板行,帮助过于有用.

然后我想重新定义帮助:

def hhelp(x):
    return x.__doc__
help = hhelp

但我认为这是邪恶的;比如重新定义数字7,我希望帮助(一些内置)仍能正常工作,并且选择性劫持只发生在MYclasses上.

永远都有

def doc(x):
    return x.__doc__

如果我找不到任何选择性劫持帮助()的东西.

class A(object):
    """instantiate a = A(x), then use a.sqr() to get x**2"""
    def __init__(self, x):
            self.x = x
    def sqr(self):
            return x**2

结果十九行.我只想展示我的单行文档字符串.

Help on class A in module __main__:

class A(__builtin__.object)
 |  instantiate a = A(x), then use a.sqr() to get x**2
 |  
 |  Methods defined here:
 |  
 |  __init__(self, x)
 |  
 |  sqr(self)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)

解决方法:

您可以monkeypatch内置帮助函数来显示类的__doc__字符串,并回退到其他对象的原始帮助:

import inspect
import pydoc

class Helper(object):
    def __init__(self):
        self.help = __builtins__.help

    def __call__(self, obj):
        if inspect.isclass(obj):
            return pydoc.pager(obj.__doc__)
        else:
            return self.help(obj)

__builtins__.help = Helper()

其中产生以下输出:

class Foo:
    """This is the docstring."""

    def foo(self):
        return None

help(Foo)

# Output:
# This is the docstring.

标签:python,python-2-7,docstring
来源: https://codeday.me/bug/20190701/1345818.html