我有很多可调用的对象,它们都正确地填写了__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)
看起来更像是这个的输出:
def myFunc():
"some doco text"
# do some stuff
pass
help(myFunc)
答案 0 :(得分:5)
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)
然后在您的实例上添加__help__
属性:
class myCallable:
def __init__(self, doc):
self.__doc__ = doc
self.__help__ = doc
答案 1 :(得分:2)
我不清楚你的问题到底是什么。我的理解是你有一个类和一个函数在其中定义,你想知道Python从哪里获取该函数的帮助文本。
Python从该类/方法中提供的doc字符串中获取帮助文本。
如果在该类中有一个类“A”和一个方法“f”,并且函数“f”中有文档字符串,那么以下终端转储应该有助于清除您的问题:
>>> class A:
def __init__(self):
self.c = 0 # some class variable
def f(self, x):
"""this is the documentation/help text for the function "f" """
return x+1
>>> help(A.f)
Help on method f in module __main__:
f(self, x) unbound __main__.A method
this is the documentation/help text for the function "f"
>>> A.f.__doc__
'this is the documentation/help text for the function "f" '
希望这有帮助