Подтвердить что ты не робот

Неожиданный аргумент ключевого слова при использовании ** kwargs в конструкторе

Я озадачен. Я пытаюсь сделать подкласс, который не заботится о каких-либо параметрах ключевого слова - просто передает их все вместе, как и суперкласс, и явно задает один параметр, необходимый для конструктора. Вот упрощенная версия моего кода:

class BaseClass(object):
    def __init__(self, required, optional=None):
        pass

def SubClass(BaseClass):
    def __init__(self, **kwargs):
        super(SubClass, self).__init__(None, **kwargs)

a = SubClass(optional='foo')  # this throws TypeError!?!??

Это не работает с

[email protected]$ python minimal.py
Traceback (most recent call last):
  File "minimal.py", line 9, in <module>
    a = SubClass(optional='foo')
TypeError: SubClass() got an unexpected keyword argument 'optional'

Как он может жаловаться на неожиданный аргумент ключевого слова, когда метод имеет **kwargs?

(Python 2.7.3 на Ubuntu)

4b9b3361

Ответ 1

def SubClass(BaseClass):

- это функция, а не класс. Нет ошибки, потому что BaseClass может быть именем аргумента, а вложенные функции разрешены. Синтаксис - это весело, не так ли?

class SubClass(BaseClass):

Ответ 2

Наступив на этот пост при поиске ответа на ту же самую ошибку, но по другой причине.

Я разработал свою проблему (ошибка начинающих питонов), но я подумал, что я должен поставить ее здесь, если она поможет кому-то другому.

Моя структура проекта:

project\
--package1\
----Module1.py
----Module2.py
--package2\
...blah blah blah...

, где Module2 расширяет Module1, а имена классов совпадают с именами модулей/файлов

В Module2.py у меня было:

from package1 import Module1

предполагая, что это будет импортировать классы внутри.

Получил непредвиденную ошибку аргумента ключевого слова, когда я попытался создать Class2 Class

Mod2 = Module2(kw1=var1, kw2=var2)

Исправлено с помощью

from package1.Module1 import Module1

Это [package name].[module name] import [class name]

Надеюсь, что это поможет кому-то другому.