10

我有很多可调用对象,并且它们都__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)
4

2 回答 2

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
于 2009-11-24T11:30:41.697 回答
2

我不太清楚你的问题到底是什么。我的理解是,您在其中定义了一个类和一个函数,并且您想知道 Python 从何处获取该函数的帮助文本。

Python 从该类/方法中提供的文档字符串中获取帮助文本。

如果您在该类中有一个类“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" '

希望这可以帮助

于 2009-11-24T02:30:58.683 回答