Python 避免在Sphinx文档中扩展sys.argv关键字参数

Python 避免在Sphinx文档中扩展sys.argv关键字参数,python,python-sphinx,Python,Python Sphinx,我有一门像这样的课 import sys class ACommand(object): @classmethod def cmd(cls, argv=sys.argv): " Executes the command. " pass 当使用Sphinx记录此文件时,它会将sys.argv扩展到其当前值,生成类似以下签名的内容 classmethod cmd(argv=['/path/to/sphinx-build', '-b', 'html

我有一门像这样的课

import sys

class ACommand(object):

    @classmethod
    def cmd(cls, argv=sys.argv):
        " Executes the command. "
        pass
当使用Sphinx记录此文件时,它会将sys.argv扩展到其当前值,生成类似以下签名的内容

classmethod cmd(argv=['/path/to/sphinx-build', '-b', 'html', '-d', '_build/doctrees', '.', '_build/html'])

我发现在文档中有
sys.argv
比它的扩展更方便。如何实现这一点?

您可以创建代理对象,如

class ListProxy(object):
    def __init__(self, l):
        self.list = l
    def __getitem__(self, i):
        return self.list[i]
然后

@classmethod
def cmd(cls, argv=ListProxy(sys.argv)):
    " Executes the command. "
或者,更简单,你可以这样做

@classmethod
def cmd(cls, argv=None):
    " Executes the command. "
    if argv is None:
        argv = sys.argv

您可以创建代理对象,例如

class ListProxy(object):
    def __init__(self, l):
        self.list = l
    def __getitem__(self, i):
        return self.list[i]
然后

@classmethod
def cmd(cls, argv=ListProxy(sys.argv)):
    " Executes the command. "
或者,更简单,你可以这样做

@classmethod
def cmd(cls, argv=None):
    " Executes the command. "
    if argv is None:
        argv = sys.argv

类似的问题:问题是sphinx导入您的模块/函数以生成文档,因此它实际上无法看到参数是否真的是
sys.argv
,它只看到导入模块时
sys.argv
的值。我不是Sphinx专家,但也许有某种方法可以通过指定docstring中的值来覆盖此类结果(如
:param argv:Arguments…(默认值:sys.argv)
)@Bakuriu:不可能通过更改docstring来覆盖函数签名。看。@mzjn:这就是我为什么说可能。无论如何,我认为这样一个功能将是有用的。reST已经提供了
:param…:
:type…:
,因此将其包含在系统中可能不会太难。您只需首先获取函数的签名,然后读取文档字符串,最后用新信息覆盖签名。@Bakuriu:我收回10月2日的评论。您可以通过更改docstring来覆盖函数签名。请参阅。类似问题:问题在于sphinx导入模块/函数以生成文档,因此它实际上无法看到参数是否真的是
sys.argv
,它只看到导入模块时
sys.argv
的值。我不是Sphinx专家,但也许有某种方法可以通过指定docstring中的值来覆盖此类结果(如
:param argv:Arguments…(默认值:sys.argv)
)@Bakuriu:不可能通过更改docstring来覆盖函数签名。看。@mzjn:这就是我为什么说可能。无论如何,我认为这样一个功能将是有用的。reST已经提供了
:param…:
:type…:
,因此将其包含在系统中可能不会太难。您只需首先获取函数的签名,然后读取文档字符串,最后用新信息覆盖签名。@Bakuriu:我收回10月2日的评论。您可以通过更改docstring来覆盖函数签名。看,我终于选择了第二个选项。我终于选择了第二个选项。