40

我有一个定义如下的类

class M(object):
    def __init__(self, **kwargs):
        ...do_something

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

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

我想传递这个命名空间的值(除了message_type)来创建一个类的实例M。我试过了

M(args)

但出现错误

TypeError: __init__() takes exactly 1 argument (2 given)

我不明白。我怎样才能

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

1 回答 1

60

您需要传入以下结果vars(args)

M(**vars(args))

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

在里面M.__init__(),干脆忽略message_type关键。

于 2013-03-04T16:19:09.000 回答