का अनुसरण करें ...: जब तक हम एक विरासत है
>>> class A(object): pass
...
>>> A.__mro__
(<class '__main__.A'>, <type 'object'>)
>>> class B(A): pass
...
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
>>> class C(A): pass
...
>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <type 'object'>)
>>>
, __mro__
बस की टपल है: वर्ग, उसके आधार, इसके आधार का आधार, और इतने पर object
अप करने के लिए (केवल पाठ्यक्रम के नए शैली के वर्गों के लिए काम करता है)।
अब, साथ कई विरासत ...:
>>> class D(B, C): pass
...
>>> D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)
... आप भी आश्वासन दिया है कि, __mro__
में, कोई वर्ग दोहराया गया है मिलता है, और कोई वर्ग अपने पूर्वजों के बाद आता है, को बचाने कि कक्षाएं जो पहले एकाधिक विरासत के समान स्तर पर प्रवेश करती हैं (जैसे कि इस उदाहरण में बी और सी) __mro__
बाएं से दाएं हैं।
प्रत्येक विशेषता जो आपको कक्षा के उदाहरण पर मिलती है, न केवल विधियों, __mro__
के साथ अवधारणात्मक रूप से देखी जाती है, इसलिए, यदि पूर्वजों के बीच एक से अधिक वर्ग उस नाम को परिभाषित करते हैं, तो यह आपको बताता है कि विशेषता कहां मिलेगी - __mro__
में पहली कक्षा में जो उस नाम को परिभाषित करता है।
स्रोत
2010-01-06 03:17:19
http://www.python.org/download/releases/2.3/mro – GodMan
ओफ, यह कितना लंबा पढ़ा जाता है। – paulmelnikow