代码之家  ›  专栏  ›  技术社区  ›  Gordon Wrigley

python的pydoc帮助函数在哪里获取其内容?

  •  10
  • Gordon Wrigley  · 技术社区  · 15 年前

    我有很多可调用的对象,它们都有 __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 回复  |  直到 8 年前
        1
  •  5
  •   Ned Batchelder    15 年前

    这个 help 功能(在 pydoc 模块)不准备查找每个实例的docstring。我快速浏览了一下这个模块,看看是否有办法提供明确的帮助,但似乎没有。它使用 inspect 模块来确定它是什么类型的,而您的myfunc看起来不像函数,它看起来像一个实例。所以pydoc会打印关于实例类的帮助。

    如果像这样的话会很好 __doc__ 你可以添加一个 __help__ 属性,但不支持该属性。

    我不太愿意建议,但你最好的办法可能是定义一个新的 帮助 功能:

    old_help = help
    def help(thing):
        if hasattr(thing, '__help__'):
            print thing.__help__
        else:
            old_help(thing)
    

    然后放一个 我的帮助 实例的属性:

    class myCallable:
        def __init__(self, doc):
            self.__doc__ = doc
            self.__help__ = doc
    
        2
  •  2
  •   inspectorG4dget    15 年前

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

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

    如果您在该类中有一个类“a”和一个方法“f”,并且函数“f”中有docstrings,那么下面的终端转储应该有助于清除您的问题:

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

    希望这有帮助

    推荐文章