Ответ 1
def SubClass(BaseClass):
- это функция, а не класс. Нет ошибки, потому что BaseClass
может быть именем аргумента, а вложенные функции разрешены. Синтаксис - это весело, не так ли?
class SubClass(BaseClass):
Я озадачен. Я пытаюсь сделать подкласс, который не заботится о каких-либо параметрах ключевого слова - просто передает их все вместе, как и суперкласс, и явно задает один параметр, необходимый для конструктора. Вот упрощенная версия моего кода:
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)
def SubClass(BaseClass):
- это функция, а не класс. Нет ошибки, потому что BaseClass
может быть именем аргумента, а вложенные функции разрешены. Синтаксис - это весело, не так ли?
class SubClass(BaseClass):
Наступив на этот пост при поиске ответа на ту же самую ошибку, но по другой причине.
Я разработал свою проблему (ошибка начинающих питонов), но я подумал, что я должен поставить ее здесь, если она поможет кому-то другому.
Моя структура проекта:
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]
Надеюсь, что это поможет кому-то другому.