Saya mendapatkan kesalahan ini:
TypeError: object.__init__() takes no parameters
ketika menjalankan kode saya, saya tidak benar-benar melihat apa yang saya lakukan salah di sini:
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
Lucas Kauffman
sumber
sumber
Ini telah menggigit saya dua kali baru-baru ini (saya tahu saya seharusnya belajar dari kesalahan saya pertama kali) dan jawaban yang diterima juga tidak membantu saya, jadi meskipun masih segar dalam pikiran saya, saya pikir saya akan mengirimkan jawaban saya sendiri untuk berjaga-jaga ada orang lain yang mengalami ini (atau saya perlu ini lagi di masa mendatang).
Dalam kasus saya, masalahnya adalah saya mengirimkan kwarg ke inisialisasi subclass tetapi di superclass kata kunci itu kemudian diteruskan ke panggilan super ().
Saya selalu berpikir hal-hal berikut adalah yang terbaik dengan sebuah contoh:
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
Jadi untuk mengatasi ini saya hanya perlu mengubah urutan saya melakukan sesuatu dengan metode Foo .__ init__; misalnya:
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
sumber