Python Academy · पाठ

मल्टीपल इनहेरिटेंस और MRO

मल्टीपल इनहेरिटेंस और Python के MRO (C3 linearization) को समझें।

पाठ 3, कुल 4 में से14 चरण

मल्टीपल इनहेरिटेंस और MRO, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

परिचय

पाइथन एकाधिक इनहेरिटेंस का समर्थन करता है। मेथड रिज़ॉल्यूशन ऑर्डर (MRO) तय करता है कि नामों के टकराने पर कौन-सा मेथड कॉल होगा।

एकाधिक इनहेरिटेंस का सिंटैक्स

क्लास C(A, B): A और B दोनों से इनहेरिट करती है। C को दोनों के सभी मेथड मिलते हैं।
class A:
    def hello(self): return 'A'
class B:
    def world(self): return 'B'
class C(A, B): pass
c = C()
print(c.hello(), c.world())

मेथड रिज़ॉल्यूशन ऑर्डर (MRO)

MRO खोज क्रम निर्धारित करता है। C.__mro__ क्रम दिखाता है: C, A, B, object। मिलान वाला मेथड रखने वाली पहली क्लास विजेता होती है।
class A:
    def greet(self): return 'A'
class B:
    def greet(self): return 'B'
class C(A, B): pass
print(C().greet())  # A wins
print(C.__mro__)

C3 लीनियराइज़ेशन

पाइथन MRO की गणना के लिए C3 लीनियराइज़ेशन का उपयोग करता है। यह सुनिश्चित करता है कि चाइल्ड पैरेंट से पहले और एकाधिक बेस क्लास बाएँ से दाएँ रहें।
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
print([c.__name__ for c in D.__mro__])

डायमंड इनहेरिटेंस

D(B,C), जहाँ B और C दोनों A से इनहेरिट करते हैं, डायमंड समस्या का उदाहरण है। C3 सुनिश्चित करता है कि A का __init__ केवल एक बार कॉल हो।
class A:
    def __init__(self): print('A')
class B(A):
    def __init__(self): super().__init__(); print('B')
class C(A):
    def __init__(self): super().__init__(); print('C')
class D(B, C):
    def __init__(self): super().__init__(); print('D')
D()

मिक्सिन

मिक्सिन एक ऐसी क्लास होती है जिसे एकाधिक इनहेरिटेंस के लिए बनाया जाता है। यह अकेले पूर्ण क्लास के रूप में खड़े हुए बिना मेथड जोड़ती है।
class JSONMixin:
    def to_json(self):
        import json
        return json.dumps(vars(self))
class User(JSONMixin):
    def __init__(self, name, age): self.name,self.age=name,age
print(User('Alice', 30).to_json())

मिक्सिन डिज़ाइन नियम

मिक्सिन में __init__ नहीं होना चाहिए, उन्हें नॉन-मिक्सिन क्लास से इनहेरिट नहीं करना चाहिए और उन्हें एक ही कार्य करना चाहिए। उनके नाम के अंत में Mixin लगाएँ।
class LoggingMixin:
    def log(self, msg): print(f'[{self.__class__.__name__}] {msg}')
class Service(LoggingMixin):
    def run(self): self.log('running')
Service().run()

एकाधिक इनहेरिटेंस में super()

super() MRO में अगली क्लास को कॉल करता है, आवश्यक नहीं कि सीधे पैरेंट को। सहकारी व्यवहार के लिए हर क्लास को super() कॉल करना चाहिए।
class Base:
    def action(self): return 'Base'
class A(Base):
    def action(self): return 'A->' + super().action()
class B(Base):
    def action(self): return 'B->' + super().action()
class C(A, B):
    def action(self): return 'C->' + super().action()
print(C().action())

डायनेमिक क्लास बनाने के लिए type()

type('NewClass', (Base,), {'method': fn}) डायनेमिक रूप से एक क्लास बनाता है। यह मेटा-प्रोग्रामिंग के लिए उपयोगी है।
def hello(self): return 'hello'
MyClass = type('MyClass', (object,), {'hello': hello})
print(MyClass().hello())

MRO जाँचना

ClassName.__mro__ या inspect.getmro(ClassName) रिज़ॉल्यूशन क्रम को क्लास की ट्यूपल के रूप में दिखाता है।
class A: pass
class B(A): pass
class C(B): pass
import inspect
print([c.__name__ for c in inspect.getmro(C)])

एकाधिक इनहेरिटेंस से कब बचें

जटिल एकाधिक इनहेरिटेंस पदानुक्रम को समझना कठिन होता है। गहरे पदानुक्रम के बजाय कंपोज़िशन या सरल मिक्सिन को प्राथमिकता दें।
# Prefer:
class User:
    def __init__(self, name, logger):
        self.name = name
        self.logger = logger  # composition
print('composition preferred')

त्वरित जाँच

Method Resolution Order की गणना करने के लिए Python किस एल्गोरिदम का उपयोग करता है?

पुनरावलोकन

बहु-विरासत: class C(A, B)। MRO के माध्यम से C3 linearization विधि खोज निर्धारित करती है। स्वच्छ बहु-विरासत के लिए mixins का उपयोग करें। super() MRO का अनुसरण करता है।

आगे बढ़ते रहें

आप बहुत अच्छी प्रगति कर रहे हैं! अगली अवधारणा में निपुणता हासिल करने के लिए आगे बढ़ते रहें।
शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
76
पाठ
320

अक्सर पूछे जाने वाले प्रश्न

क्या “मल्टीपल इनहेरिटेंस और MRO” पाठ निःशुल्क है?

हाँ—“मल्टीपल इनहेरिटेंस और MRO” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“मल्टीपल इनहेरिटेंस और MRO” में मैं क्या सीखूँगा?

मल्टीपल इनहेरिटेंस और Python के MRO (C3 linearization) को समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“मल्टीपल इनहेरिटेंस और MRO” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. एकल इनहेरिटेंस
  2. विधि ओवरराइडिंग और super()
  3. मल्टीपल इनहेरिटेंस और MRO
  4. पॉलीमॉर्फ़िज़्म और डक टाइपिंग
← Python Academy पर वापस जाएँ