__init__, наследование и переменные параметры - PullRequest
1 голос
/ 13 сентября 2010

Я бы хотел создать подкласс существующего класса 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 ]

3 голосов
/ 13 сентября 2010

В вызове super(EIDEnvironment, self).__init__(...) измените kw на **kw.Поскольку код в настоящее время написан, вы передаете словарь, содержащий ключевые слова args, но фактически не передаете их как args ключевого слова.

1 голос
/ 13 сентября 2010

Полагаю, вам нужно распаковать кВт , иначе вы передадите его как словарь:

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