Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ArgParse Python模块:更改内置参数的默认参数值_Python_Inheritance_Default_Parent_Argparse - Fatal编程技术网

ArgParse Python模块:更改内置参数的默认参数值

ArgParse Python模块:更改内置参数的默认参数值,python,inheritance,default,parent,argparse,Python,Inheritance,Default,Parent,Argparse,我有一堆Python脚本,它们使用公共代码来读取输入和写入不同类型的输出文件 这些是化学结构文件。一些示例文件类型是.smi或.sdf 默认情况下,我希望其中一些脚本以“smi”文件格式输出数据,另一些脚本以“sdf”格式输出数据 是否可以重写从父解析器继承的参数的默认值 例如 # Inherited code filesParser = argparse.ArgumentParser(add_help=False) filesParser.add_argument('-o', dest='ou

我有一堆Python脚本,它们使用公共代码来读取输入和写入不同类型的输出文件

这些是化学结构文件。一些示例文件类型是.smi或.sdf

默认情况下,我希望其中一些脚本以“smi”文件格式输出数据,另一些脚本以“sdf”格式输出数据

是否可以重写从父解析器继承的参数的默认值

例如

# Inherited code
filesParser = argparse.ArgumentParser(add_help=False)
filesParser.add_argument('-o', dest='outformat', default="smi")

# Script code
parser = argparse.ArgumentParser(description='inherts from filesParser', parents=[filesParser])
parser.add_argument('--foo')

# Something like...
# parser.outformat.default = "sdf"

args = parser.parse_args()
第一篇帖子,希望我的礼仪可以

非常感谢,, 戴夫

是():


set\u defaults
可能是最简单的修复方法

但是我认为知道你可以直接改变一个动作的默认值是值得的

filesParser = argparse.ArgumentParser(add_help=False)
outaction=filesParser.add_argument('-o', dest='outformat', default="smi")
parser = argparse.ArgumentParser(description='inherts from filesParser', parents=[filesParser])
fooaction=parser.add_argument('--foo')
print fooaction.default
# None
print outaction.default
# 'smi'
outaction.default='sdf'
args=parser.parse_args()
print args
# Namespace(foo=None, outformat='sdf')
add_argument
返回一个
Action
对象,该对象包含在参数中指定的所有信息。在这里,我将这些操作(链接)保存在变量
outaction
fooaction
中<代码>输出。默认值是
parse_args
使用的默认值

对于继承的代码,保存
outaction
链接可能会比较麻烦(尽管可以在“parser.\u actions”列表中找到它)。因此,让
set_defaults
为您完成这项工作是有意义的

set\u defaults
的代码可能具有指导意义:

def set_defaults(self, **kwargs):
    self._defaults.update(kwargs)

    # if these defaults match any existing arguments, replace
    # the previous default on the object with the new one
    for action in self._actions:
        if action.dest in kwargs:
            action.default = kwargs[action.dest]
首先,它将新的默认值放入
解析器中。\u defaults
字典,然后有条件地修改
action.default
属性(注意
解析器的搜索。\u actions
)。它必须同时做这两件事,因为当需要使用默认值时,
操作.default
值优先于
解析器。\u defaults


如果您在交互式shell(例如Ipython)中运行此代码,并且可以打印
操作
解析器
对象,则这些细节将更有意义。有关使用“私人”属性的常见注意事项适用。

非常感谢!我四处看了一会儿,没有发现它。
def set_defaults(self, **kwargs):
    self._defaults.update(kwargs)

    # if these defaults match any existing arguments, replace
    # the previous default on the object with the new one
    for action in self._actions:
        if action.dest in kwargs:
            action.default = kwargs[action.dest]