Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में super() मल्टीपल इनहेरिटेंस के साथ कैसे काम करता है?

मल्टीपल इनहेरिटेंस में एक चाइल्ड क्लास एक से अधिक पैरेंट क्लासेस से इनहेरिट करती है। 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__() कॉल करना चाहिए सहयोगी इनहेरिटेंस के लिए
  1. Python में Bokeh के साथ इमेजेज के साथ कैसे काम करें? Python में Bokeh के साथ इमेजेज के साथ कैसे काम करें?

    Bokeh में इमेजेज के साथ काम करने के लिए image_url() मेथड का उपयोग करें और इमेजेज की लिस्ट पास करें। चरण :func:show कॉल होने पर फाइल में सेव आउटपुट जनरेट करने के लिए डिफ़ॉल्ट आउटपुट स्टेट कॉन्फिगर करें। प्लॉटिंग के लिए नया फिगर बनाएं। दिए गए URLs से लोड की गई इमेजेज रेंडर करें। Bokeh ऑब्जेक्ट या एप

  1. - पायथन में \B रेगुलर एक्सप्रेशन कैसे काम करता है?

    वर्ड बाउंड्री \b उन पोजीशन से मैच करता है जहां एक तरफ वर्ड कैरेक्टर होता है (आमतौर पर अक्षर, अंक या अंडरस्कोर)। \B उन सभी पोजीशन से मैच करता है जहां \b मैच नहीं करता। निम्नलिखित कोड दर्शाता है कि रेगेक्स \B कैसे काम करता है: import re result = re.findall(r\Bcat, certificate) result2 = re.findall(r

  1. - पायथन फ़ाइलों में अंडरस्कोर _ कैसे काम करता है?

    अंडरस्कोर (_) पायथन में विशेष है। पायथन में अंडरस्कोर का उपयोग करने के 5 मुख्य मामले हैं। 1. इंटरप्रेटर में अंतिम एक्सप्रेशन का मान स्टोर करना पायथन इंटरप्रेटर अंतिम एक्सप्रेशन के मान को _ नामक विशेष वेरिएबल में स्टोर करता है। >>> 12 + 10 22 >>> _ 22 2. विशिष्ट मानों को अनदेखा करन