मान लें कि मेरे पास 3 कक्षाएं हैं: ए, बी और सी ए बी और बी के लिए बेस क्लास सी है। सी पदानुक्रम सामान्य रूप से यहां रखा जाता है, लेकिन एक विधि के लिए यह अलग होना चाहिए। सी क्लास के लिए यह काम करना चाहिए जैसे कि यह इस तरह एएक वर्ग से पायथन इनहेरिट लेकिन एक और कक्षा को कॉल करने वाली विधि ओवरराइड करें?
से विरासत में मिला था उदाहरण के लिए:
class A(object):
def m(self):
print 'a'
class B(A):
def m(self):
super(B, self).m()
print 'b'
class C(B):
def m(self):
super(A, self).m()
print 'c'
तो बुनियादी तौर पर इसे इस तरह से काम करना चाहिए:
a = A()
a.m()
a
b = B()
b.m()
a
b
c = C()
c.m()
a
c
लेकिन यह करने के लिए जा नहीं है सी कक्षा के लिए काम, क्योंकि मुझे यह त्रुटि मिलती है:
AttributeError: 'super' object has no attribute 'm'
सी कक्षा के लिए इसे हल करने के लिए मैं क्लास से प्राप्त कर सकता हूं एस, लेकिन मैं बी से सबकुछ प्राप्त करना चाहता हूं और उस विशिष्ट विधि के लिए m
बेस क्लास ए के लिए सुपर कॉल का मतलब है। मेरा मतलब है कि विधि एक अपवाद है। या मुझे काम करने के लिए कक्षा सी के लिए इसे किसी तरह अलग तरीके से कॉल करना चाहिए?
मैं यह कैसे कर सकता हूं?
क्या आपने 'सुपर 'का उपयोग करने के बजाय' एएम (स्वयं) 'का प्रयास किया था? –
@MathiasEttinger नहीं मैंने नहीं किया, लेकिन अब मैंने कोशिश की और यह पूरी तरह से काम करता है। धन्यवाद। आप इसे उत्तर के रूप में पोस्ट कर सकते हैं, क्योंकि इससे काम करने के लिए मेरी समस्या – Andrius
हल हो गई है, एएम() एक क्लास विधि – fixmycode