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来覆盖函数签名。看,我终于选择了第二个选项。我终于选择了第二个选项。