इसने मुझे हाल ही में दो बार काट लिया है (मुझे पता है कि मुझे पहली बार अपनी गलती से सीख लेनी चाहिए थी) और स्वीकृत उत्तर ने मुझे या तो समय पर मदद नहीं की है जबकि यह मेरे दिमाग में ताजा है मैंने सोचा कि मैं सिर्फ मामले में अपना जवाब प्रस्तुत करूंगा। कोई और इस में भाग रहा है (या मुझे भविष्य में फिर से इसकी आवश्यकता है)।
मेरे मामले में मुद्दा यह था कि मैं उपवर्ग के प्रारंभिककरण में एक kwarg पारित कर रहा था, लेकिन सुपरक्लास में तब कीवर्ड arg को सुपर () कॉल में पारित किया जा रहा था।
मुझे हमेशा लगता है कि इस प्रकार की चीजें एक उदाहरण के साथ सबसे अच्छी हैं:
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})
इसलिए इसे हल करने के लिए मुझे केवल उस क्रम को बदलने की आवश्यकता है जो मैं फू .__ 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