__init__、继承与可变参数
我想要创建一个新的类,这个类是基于一个已经存在的scons类(叫做SConsEnvironment
)的。这个类的初始化方法__init__
看起来是这样的:
def __init__(self,
platform=None,
tools=None,
toolpath=None,
variables=None,
parse_flags = None,
**kw):
在我自己的类Environment
中,这个类是从SConsEnvironment
派生出来的,我尝试做了以下事情:
def __init__(self,
platform=None,
tools=None,
toolpath=None,
variables=None,
parse_flags = None,
**kw):
if ('ENV' not in kw):
kw['ENV'] = os.environ.copy()
super(EIDEnvironment, self).__init__(
platform,
tools,
toolpath,
variables,
parse_flags,
kw) //Error here
但是Python报错了:
TypeError: __init__() takes at most 6 arguments (7 given):
除非我不会数数,否则看起来这两个__init__
方法都需要7个参数。我相信有个合理的原因导致这个不工作,但是什么原因呢?我该怎么解决这个问题呢?
2 个回答
1
我想你需要把 kw 解包一下,不然你传递的就是一个字典了:
super(EIDEnvironment, self).__init__(
platform,
tools,
toolpath,
variables,
parse_flags,
**kw)
3
在super(EIDEnvironment, self).__init__(...)
这个调用中,把kw
改成**kw
。现在的代码是把一个字典传给了这个函数,但实际上并没有把它当作关键字参数传递。