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)
Bar(42, named_optional_param={'xyz': 123})
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)
super(Foo, self).__init__(*args, **kwargs)
self.required_param = required_param_1