__init__,继承和可变参数

时间:2010-09-13 10:34:20

标签: python inheritance initialization variadic-functions

我想继承现有的 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 个答案:

答案 0 :(得分:3)

super(EIDEnvironment, self).__init__(...)来电中,将kw更改为**kw。由于代码是当前编写的,因此您传递的是包含关键字args的字典,但实际上并未将它们作为关键字args传递。

答案 1 :(得分:1)

我想你需要解压 kw ,否则你把它作为字典传递:

super(EIDEnvironment, self).__init__(
            platform,
            tools,
            toolpath,
            variables,
            parse_flags,
            **kw)