如何将argparse参数传递给kwargs?

Ale*_*lex 27 python arguments python-2.7 argparse

我有一个类定义如下

class M(object):
    def __init__(self, **kwargs):
        ...do_something
Run Code Online (Sandbox Code Playgroud)

我有结果argparse.parse_args(),例如:

> args = parse_args()
> print args
Namespace(value=5, message='test', message_type='email', extra="blah", param="whatever")
Run Code Online (Sandbox Code Playgroud)

我想传递此命名空间的值(除外message_type)以创建该类的实例M.我试过了

M(args)
Run Code Online (Sandbox Code Playgroud)

但是得到了一个错误

TypeError: __init__() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)

我不明白.我怎么能够

  1. message_type从中删除列表中的值args
  2. 传递值,就像我M(value=5, message='test', extra="blah", param="whatever")直接输入一样.

Mar*_*ers 39

你需要传递结果vars(args):

M(**vars(args))
Run Code Online (Sandbox Code Playgroud)

vars()函数将Namespace实例的名称空间(其__dict__属性)作为字典返回.

在里面M.__init__(),只需忽略message_type键.

  • 我建议做`arg_dict = dict((k,v)for k,v in vars(args).items()if k!="message_type")`以避免使用`vars`可能的未定义行为. (2认同)