पायथन इन ए नटशेल (द्वितीय संस्करण) पुस्तक में एक उदाहरण है जो
पुरानी शैली की कक्षाओं का उपयोग करके प्रदर्शित करता है कि क्लासिक रिज़ॉल्यूशन ऑर्डर में तरीकों को कैसे हल किया
जाता है और नए ऑर्डर के साथ यह कैसे अलग है।
मैंने नई शैली में उदाहरण को फिर से लिखने के द्वारा एक ही उदाहरण की कोशिश की, लेकिन परिणाम पुराने शैली वर्गों के साथ प्राप्त किए गए से अलग नहीं है। उदाहरण को चलाने के लिए मैं जिस अजगर संस्करण का उपयोग कर रहा हूं वह 2.5.2 है। नीचे उदाहरण है:
class Base1(object):
def amethod(self): print "Base1"
class Base2(Base1):
pass
class Base3(object):
def amethod(self): print "Base3"
class Derived(Base2,Base3):
pass
instance = Derived()
instance.amethod()
print Derived.__mro__
कॉल instance.amethod()
प्रिंट करता है Base1
, लेकिन आउटपुट की नई शैली के साथ एमआरओ की मेरी समझ के अनुसार आउटपुट होना चाहिए था Base3
। कॉल Derived.__mro__
प्रिंट:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
मुझे यकीन नहीं है कि नई शैली की कक्षाओं के साथ एमआरओ की मेरी समझ गलत है या मैं एक मूर्खतापूर्ण गलती कर रहा हूं जिसका मैं पता नहीं लगा पा रहा हूं। कृपया एमआरओ की बेहतर समझ में मेरी मदद करें।