Bu son zamanlarda beni iki kez ısırdı (ilk seferinde hatamdan ders almam gerektiğini biliyorum) ve kabul edilen cevap bana da yardımcı olmadı, bu yüzden aklımda tazeyken, her ihtimale karşı kendi cevabımı göndereceğimi düşündüm başka biri bununla karşılaşıyor (veya buna gelecekte tekrar ihtiyacım var).
Benim durumumda sorun, alt sınıfın ilklendirilmesine bir kwarg geçiriyor olmamdı, ancak süper sınıfta bu arg anahtar sözcüğü daha sonra super () çağrısına geçiliyordu.
Her zaman bu tür şeylerin bir örnekle en iyisi olduğunu düşünüyorum
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})
Bu yüzden bunu çözmek için Foo .__ init__ yönteminde yaptığım şeyleri sırayı değiştirmem gerekiyor; Örneğin:
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