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

时间:2009-11-24 00:28:16

标签: 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)

看起来更像是这个的输出:

def myFunc():
    "some doco text"
    # do some stuff
    pass

help(myFunc)

2 个答案:

答案 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" '

希望这有帮助