如何有选择地覆盖python的帮助(MYclass)中的文本与更短和定制的东西?
作者:互联网
我正在学习编写用户友好的类和方法,我希望用户知道如何在终端中使用它们. Python的标准帮助(MYclass)返回我不想要的十八行,这是一个小窗口的半屏幕,那些刚学习python的人将失去与前一行从顶部消失的连续性.
有什么方法可以覆盖使用帮助(MYclass)(或帮助(MYmethod))显示的内容,以便它只显示(在这种情况下)单行文档字符串?
虽然有些IDE在泡沫中显示文档字符串,但终端不合作. (Do the triple-quoted (docstring) messages in Python appear while typing in IDEs other than IDLE?):
相反,我转而寻求帮助,但是对于所有这些额外的模板行,帮助过于有用.
然后我想重新定义帮助:
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