【问题标题】:Where does Python's pydoc help function get its content?Python 的 pydoc 帮助函数从哪里获得它的内容?
【发布时间】:2009-11-24 00:28:15
【问题描述】:

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

【问题讨论】:

  • 我的猜测是这里的问题是基于类的 myFunc 具有类型实例,而另一个具有类型函数。我不确定是否有办法解决这个问题。 (尝试在每个上打印 type(myFunc) 以查看)
  • 你是正确的类型,是在 pydoc 中使用的信息吗?

标签: python introspection pydoc


【解决方案1】:

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

【讨论】:

  • 我没有考虑过这种方法,这是一个有趣的建议。我关心帮助的特定程序已经有一个自定义控制台和完成程序,所以自定义帮助并不奇怪,它可以作为自定义控制台代码的一部分来完成。
【解决方案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" '

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多