पायथन सुपर ()

सुपर () बिलिन एक प्रॉक्सी ऑब्जेक्ट (सुपरक्लास की अस्थायी वस्तु) देता है जो हमें बेस क्लास के तरीकों तक पहुंचने की अनुमति देता है।

पायथन में, super()दो प्रमुख उपयोग मामले हैं:

  • हमें स्पष्ट रूप से आधार वर्ग नाम का उपयोग करने से बचने की अनुमति देता है
  • मल्टीपल इनहेरिटेंस के साथ काम करना

उदाहरण 1: सिंगल इनहेरिटेंस के साथ सुपर ()

एकल वंशानुक्रम के मामले में, यह हमें आधार वर्ग को संदर्भित करने की अनुमति देता है super()

 class Mammal(object): def __init__(self, mammalName): print(mammalName, 'is a warm-blooded animal.') class Dog(Mammal): def __init__(self): print('Dog has four legs.') super().__init__('Dog') d1 = Dog()

आउटपुट

कुत्ते के चार पैर होते हैं। कुत्ता एक गर्म खून वाला जानवर है।

यहां, हमने __init__()कोड का उपयोग करके स्तनपायी वर्ग (डॉग क्लास से) की विधि को बुलाया

 सुपर () .__ init __ ('डॉग')

की बजाय

 स्तनधारी .__ init __ (स्व, 'कुत्ता')

चूंकि हमें अपने सदस्यों को कॉल करने पर बेस क्लास का नाम निर्दिष्ट करने की आवश्यकता नहीं है, इसलिए हम आसानी से बेस क्लास का नाम बदल सकते हैं (यदि हमें आवश्यकता है)।

 # changing base class to CanidaeFamily class Dog(CanidaeFamily): def __init__(self): print('Dog has four legs.') # no need to change this super().__init__('Dog')

super()निर्मित एक प्रॉक्सी वस्तु, एक विकल्प के उद्देश्य यह है कि प्रतिनिधि के माध्यम से आधार वर्ग के तरीकों कॉल कर सकते हैं देता है। इसे अप्रत्यक्षता कहा जाता है (आधार वस्तु को संदर्भित करने की क्षमता super())

चूँकि अप्रत्यक्ष रूप से रनटाइम पर गणना की जाती है, इसलिए हम अलग-अलग आधार वर्गों का अलग-अलग समय पर उपयोग कर सकते हैं (यदि हमें ज़रूरत है)।

उदाहरण 2: सुपर () कई वंशानुक्रम के साथ

 class Animal: def __init__(self, Animal): print(Animal, 'is an animal.'); class Mammal(Animal): def __init__(self, mammalName): print(mammalName, 'is a warm-blooded animal.') super().__init__(mammalName) class NonWingedMammal(Mammal): def __init__(self, NonWingedMammal): print(NonWingedMammal, "can't fly.") super().__init__(NonWingedMammal) class NonMarineMammal(Mammal): def __init__(self, NonMarineMammal): print(NonMarineMammal, "can't swim.") super().__init__(NonMarineMammal) class Dog(NonMarineMammal, NonWingedMammal): def __init__(self): print('Dog has 4 legs.'); super().__init__('Dog') d = Dog() print('') bat = NonMarineMammal('Bat')

आउटपुट

कुत्ते के 4 पैर होते हैं। कुत्ता तैर नहीं सकता। कुत्ता उड़ नहीं सकता। कुत्ता एक गर्म खून वाला जानवर है। कुत्ता एक जानवर है। चमगादड़ तैर नहीं सकते। चमगादड़ एक गर्म खून वाला जानवर है। चमगादड़ एक जानवर है।

विधि समाधान आदेश (MRO)

विधि रिज़ॉल्यूशन ऑर्डर (एमआरओ) वह क्रम है जिसमें विधियों को कई विरासतों की उपस्थिति में विरासत में मिला होना चाहिए। आप __mro__विशेषता का उपयोग करके एमआरओ देख सकते हैं ।

 >>> कुत्ता ।__ mro__ (,,,,,)

यहां बताया गया है कि MRO कैसे काम करता है:

  • व्युत्पन्न कॉल में एक विधि को हमेशा बेस क्लास की विधि से पहले कहा जाता है।
    हमारे उदाहरण में, डॉग क्लास को नॉनमरीनमैमल या नोइंगवेडमेडल से पहले बुलाया जाता है। इन दो वर्गों को स्तनपायी के पहले कहा जाता है, जिसे पशु से पहले कहा जाता है, और पशु वर्ग को वस्तु से पहले कहा जाता है।
  • यदि कई माता-पिता हैं Dog(NonMarineMammal, NonWingedMammal), जैसे , NonMarineMammal के तरीके पहले लागू किए जाते हैं क्योंकि यह पहले दिखाई देता है।

के बारे में अधिक जानने के लिए super(), पायथन के सुपर () को सुपर माना जाता है!

दिलचस्प लेख...