Gor*_*ley 10 python introspection pydoc
我有很多可调用的对象,它们都__doc__正确地填写了字符串,但是对它们运行帮助可以为它们的类提供帮助,而不是基于它的帮助__doc__.
我想改变它,以便在它们上运行帮助产生自定义的帮助,看起来基本上就像我将得到的,如果它们是实际的函数而不是实现的类的实例__call__.
在代码中,我想输出:
class myCallable:
def __init__(self, doc):
self.__doc__ = doc
def __call__(self):
# do some stuff
pass
myFunc = myCallable("some doco text")
help(myFunc)
Run Code Online (Sandbox Code Playgroud)
看起来更像是这个的输出:
def myFunc():
"some doco text"
# do some stuff
pass
help(myFunc)
Run Code Online (Sandbox Code Playgroud)
该help函数(在pydoc模块中实现)不准备查找每个实例的文档字符串.我快速浏览了一下模块,看看是否有办法提供明确的帮助,但似乎没有.它使用inspect模块来确定它是什么类型的,并且你的myFunc看起来不像一个函数,它看起来像一个实例.所以pydoc打印帮助了解实例的类.
如果类似于__doc__你可以添加一个__help__属性会很好,但是没有支持.
我犹豫不决,但最好的办法是定义一个新help功能:
old_help = help
def help(thing):
if hasattr(thing, '__help__'):
print thing.__help__
else:
old_help(thing)
Run Code Online (Sandbox Code Playgroud)
然后__help__在您的实例上添加一个属性:
class myCallable:
def __init__(self, doc):
self.__doc__ = doc
self.__help__ = doc
Run Code Online (Sandbox Code Playgroud)