Python的pydoc帮助功能在哪里获取其内容?

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)

Ned*_*der 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)
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)