python - 如何使用更短和自定义的内容选择性地覆盖 python 帮助(MYclass)中的文本?
问题描述
我正在学习编写用户友好的类和方法,我希望用户知道如何从终端使用它们。Python的标准help(MYclass)
返回了我不想要的十八行,这是一个小窗口的半个屏幕,那些刚刚学习python的人会失去连续性,前面的行从顶部消失。
有什么方法可以覆盖使用help(MYclass)
(或help(MYmethod)
)显示的内容,以便它只显示(在这种情况下)单行文档字符串?
虽然一些 IDE 以气泡形式显示文档字符串,但终端不配合。(在 IDLE 以外的 IDE 中键入时,Python 中的三引号(文档字符串)消息是否出现?):
因此,我转而help
寻求帮助,但help
对所有这些额外的模板行帮助太大了。
然后我想到了重新定义帮助:
def hhelp(x):
return x.__doc__
help = hhelp
但我认为这是邪恶的;就像重新定义数字7一样,我还想help(some builtin)
正常工作,选择性劫持只会发生在MYclass
es。
总有
def doc(x):
return x.__doc__
如果我找不到任何选择性劫持的东西help()
。
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)
解决方案
您可以对内置help
函数进行monkeypatch 以显示__doc__
类的字符串并回退到help
其他对象的原始字符串:
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 KeyError:对于 flow_from_dataframe 中的 x_col 值
- batch-file - 批量等待,直到 Windows 10 复制完成
- java - AnyLogic 循环作为退出动作
- html - Bootstrap Navbar:导航栏品牌意图
- javascript - SyntaxError:当前未启用对实验语法“jsx”的支持,我该怎么办?
- php - 学说从反面替换onetoone关系
- javascript - 使用 json 处理应用程序的表单和所见即所得数据
- python - 带返回值的多处理
- amazon-web-services - Cloudformation 到 CodeDeployApplication 的 terraform 转换
- azure - Azure 服务主体 - 将成员添加到 AD 组的权限