python-如何在文档字符串中包含变量?

python-如何在文档字符串中包含变量?,python,Python,我正在使用cmd模块。有一个命令,我想记录如下: def do_this(self,arg) "this command accepts these values {values}".format(values="legal values") 理由是我只想输入一次法律价值列表。我发现我可以稍后更改文档字符串,但我认为这是一个黑客行为。有没有办法做到这一点?之后更改文档字符串(通过分配给do\u this.\uu doc\uuu)是唯一的方法 或者,如果你想让它看起来更好,你可以使用装饰

我正在使用cmd模块。有一个命令,我想记录如下:

def do_this(self,arg)
    "this command accepts these values {values}".format(values="legal values")

理由是我只想输入一次法律价值列表。我发现我可以稍后更改文档字符串,但我认为这是一个黑客行为。有没有办法做到这一点?

之后更改文档字符串(通过分配给
do\u this.\uu doc\uuu
)是唯一的方法

或者,如果你想让它看起来更好,你可以使用装饰器——但它仍然指定
这样做

def doc(docstring):
    def document(func):
        func.__doc__ = docstring
        return func

    return document

@doc("this command accepts these values: {values}".format(values=[1, 2, 3])
def do_this(self, arg):
    pass

由于变量中有此值,您可以在文档中引用它:

# mymodule.py
legal_values = {'one', 'two', 'three'}

def do_this(self,arg)
    """this command accepts these values: see `mymodule.legal_values`"""

您应该使用
functools.wrapps
作为装饰器,这样您就不会丢失任何东西?@gerrit negative,这不是一个包装器(将内部func重命名为
document
)聪明,我必须检查装饰器。我对python还不熟悉,现在感觉就像是在消防站喝水。关于这一点,有一个简单的问题。我可以在多个函数上使用相同的@doc吗?或者我需要为每个do_使用一个唯一的doc函数吗?@kdubs这自然是可重用的。您可以将其放在一个模块中,然后根据需要导入到其他模块中。尝试了此方法。似乎不起作用。这些都是关于合法_值的反勾号?@kdubs如果您使用Sphinx制作模块内容的HTML文档,它们就会起作用,类似于Python文档。里面会有一个超链接。但是,它在联机
帮助中不起特殊作用。@kdubs它不会在docstring中插入值,但它是用户的信息,用户可以在哪里找到这些值。当我键入
help(do\u this)
或在源代码中看到
do\u this
时,我会明白我应该看到
help(mymodule.legal\u values)
来了解这些值。啊。好啊我想另一个答案就是我想要的。它显示在cmd的帮助中