__init__、继承与可变参数

1 投票
2 回答
828 浏览
提问于 2025-04-16 04:04

我想要创建一个新的类,这个类是基于一个已经存在的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。现在的代码是把一个字典传给了这个函数,但实际上并没有把它当作关键字参数传递。

撰写回答