สิ่งนี้กัดฉันสองครั้งเมื่อเร็ว ๆ นี้ (ฉันรู้ว่าฉันควรได้เรียนรู้จากความผิดพลาดของฉันในครั้งแรก) และคำตอบที่ได้รับการยอมรับก็ไม่ได้ช่วยฉันสักครั้งดังนั้นในขณะที่ฉันคิดอยู่ในใจฉันคิดว่าฉันจะส่งคำตอบของตัวเองในกรณี มีใครกำลังเจอปัญหานี้อยู่ (หรือฉันต้องการสิ่งนี้อีกในอนาคต)
ในกรณีของฉันปัญหาคือฉันส่ง kwarg ไปยังการเริ่มต้นของคลาสย่อย แต่ในซูเปอร์คลาสนั้นคีย์เวิร์ดนั้นจะถูกส่งผ่านไปยังการเรียก 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)
Bar(42, named_optional_param={'xyz': 123})
ดังนั้นในการแก้ไขปัญหานี้ฉันต้องเปลี่ยนลำดับที่ฉันทำสิ่งต่างๆในเมธอด Foo .__ init__; เช่น:
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