मल्टीपल इनहेरिटेंस में एक चाइल्ड क्लास एक से अधिक पैरेंट क्लासेस से इनहेरिट करती है। super() फंक्शन पैरेंट क्लास के मेथड को कॉल करने का सुव्यवस्थित तरीका प्रदान करता है, खासकर मल्टीपल इनहेरिटेंस में MRO (Method Resolution Order) का पालन करते हुए।
मल्टीपल इनहेरिटेंस का बेसिक उदाहरण
class Father:
fathername = ""
def father(self):
print(self.fathername)
class Mother:
mothername = ""
def mother(self):
print(self.mothername)
class Child(Father, Mother):
def parent(self):
print("Father:", self.fathername)
print("Mother:", self.mothername)
s1 = Child()
s1.fathername = "Srinivas"
s1.mothername = "Anjali"
s1.parent()
आउटपुट
Father: Srinivas Mother: Anjali
super() के साथ मल्टीपल इनहेरिटेंस
class Father:
def __init__(self):
self.fathername = ""
print("Father __init__ called")
class Mother:
def __init__(self):
self.mothername = ""
print("Mother __init__ called")
class Child(Father, Mother):
def __init__(self):
super().__init__() # MRO के अनुसार Father.__init__ कॉल होगा
print("Child __init__ called")
print("I am here")
s1 = Child()
s1.fathername = "Srinivas"
s1.mothername = "Anjali"
आउटपुट
Father __init__ called Child __init__ called I am here
MRO (Method Resolution Order) समझना
पायथन C3 लीनियराइज़ेशन एल्गोरिदम का उपयोग करके MRO निर्धारित करता है:
class A: pass class B(A): pass class C(A): pass class D(B, C): pass print(D.__mro__)
आउटपुट
(, , , , )
super() का सही उपयोग
class Base:
def __init__(self, value):
self.value = value
print(f"Base init: {value}")
class Mixin:
def __init__(self, mixin_value):
self.mixin_value = mixin_value
print(f"Mixin init: {mixin_value}")
class Derived(Base, Mixin):
def __init__(self, base_val, mixin_val):
super().__init__(base_val) # Base.__init__ कॉल
Mixin.__init__(self, mixin_val) # Mixin.__init__ स्पष्ट रूप से कॉल
print("Derived init")
d = Derived(10, 20)
आउटपुट
Base init: 10 Mixin init: 20 Derived init
मुख्य बिंदु
super()बिना आर्गुमेंट्स के (पायथन 3 में) वर्तमान क्लास और इंस्टेंस को ऑटोमेटिकली पास करता है- MRO यह सुनिश्चित करता है कि प्रत्येक पैरेंट क्लास का
__init__केवल एक बार कॉल हो - डायमंड इनहेरिटेंस समस्या में
super()सही ऑर्डर बनाए रखता है - सभी पैरेंट क्लासेस को
super().__init__()कॉल करना चाहिए सहयोगी इनहेरिटेंस के लिए