假设在使用argparse解析命令行后,我有一个args
命名空间。现在,我想用它来创建这样的对象:
foo = Foo(bar=args.bar)
不幸的是,我有 if 设置关键字参数的限制,它不能是None
。现在,我需要检查args.bar
是否已设置并采取相应措施:
if args.bar:
foo = Foo(bar=args.bar)
else:
foo = Foo()
这是笨拙的,并不适用于更多参数。我想拥有的是这样的:
foo = Foo(**args.__dict__)
但是这仍然存在我的初始问题,并且对于不是__init__
方法的关键字参数的键也不起作用。有没有一种很好的方法来实现这些目标?
答案 0 :(得分:2)
您可以尝试这样的事情:
>>> defined_args = {k:v for k,v in args._get_kwargs() if v is not None}
>>> foo = Foo(**defined_args)
例如:
>>> import argparse
>>> args = argparse.Namespace(key1=None,key2='value')
>>> {k:v for k,v in args._get_kwargs() if v is not None}
{'key2': 'value'}
但请注意,_get_kwargs()
不是公共API的一部分,因此在将来的版本/版本中可能会或可能不会。
答案 1 :(得分:2)