Я получаю такую ошибку:
TypeError: object.__init__() takes no parameters
при запуске своего кода я действительно не вижу, что я здесь делаю не так:
class IRCReplyModule(object):
activated=True
moduleHandlerResultList=None
moduleHandlerCommandlist=None
modulename=""
def __init__(self,modulename):
self.modulename = modulename
class SimpleHelloWorld(IRCReplyModule):
def __init__(self):
super(IRCReplyModule,self).__init__('hello world')
python
inheritance
Лукас Кауфман
источник
источник
Недавно это укусило меня дважды (я знаю, что в первый раз я должен был извлечь уроки из своей ошибки), и принятый ответ мне ни разу не помог, поэтому, пока он свеж в моей голове, я подумал, что отправлю свой собственный ответ на всякий случай кто-нибудь еще сталкивается с этим (или мне это понадобится снова в будущем).
В моем случае проблема заключалась в том, что я передавал kwarg в инициализацию подкласса, но в суперклассе это ключевое слово arg затем передавалось в вызов super ().
Я всегда думаю, что такие вещи лучше всего на примере:
class Foo(object): def __init__(self, required_param_1, *args, **kwargs): super(Foo, self).__init__(*args, **kwargs) self.required_param = required_param_1 self.some_named_optional_param = kwargs.pop('named_optional_param', None) def some_other_method(self): raise NotImplementedException class Bar(Foo): def some_other_method(self): print('Do some magic') Bar(42) # no error Bar(42, named_optional_param={'xyz': 123}) # raises TypeError: object.__init__() takes no parameters
Чтобы решить эту проблему, мне просто нужно изменить порядок действий в методе Foo .__ init__; например:
class Foo(object): def __init__(self, required_param_1, *args, **kwargs): self.some_named_optional_param = kwargs.pop('named_optional_param', None) # call super only AFTER poping the kwargs super(Foo, self).__init__(*args, **kwargs) self.required_param = required_param_1
источник