Python Academy · पाठ

विधि ओवरराइडिंग और super()

पैरेंट विधियों को ओवरराइड करें और उन्हें super() से कॉल करें।

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

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

परिचय

मेथड ओवरराइडिंग से चाइल्ड क्लास इनहेरिट किए गए व्यवहार को अपनी आवश्यकता के अनुसार बदल सकती हैं। super() से मूल इम्प्लीमेंटेशन को कॉल किया जा सकता है।

ओवरराइडिंग की मूल बातें

चाइल्ड क्लास में उसी मेथड नाम को परिभाषित करने से चाइल्ड के सभी इंस्टेंस के लिए पैरेंट का संस्करण बदल जाता है।
class Greeter:
    def greet(self): return 'Hello'
class FormalGreeter(Greeter):
    def greet(self): return 'Good day'
print(FormalGreeter().greet())

ओवरराइड में super()

चाइल्ड के अंदर super().greet() पैरेंट वाले संस्करण को कॉल करता है। यह व्यवहार को पूरी तरह बदलने के बजाय उसका विस्तार करने में उपयोगी है।
class Logger:
    def log(self, msg): print(f'[LOG] {msg}')
class TimedLogger(Logger):
    def log(self, msg):
        import time
        super().log(f'{time.time():.0f}: {msg}')
TimedLogger().log('test')

__init__ में super()

पैरेंट का आरंभीकरण सुनिश्चित करने के लिए चाइल्ड के __init__ में हमेशा super().__init__() कॉल करें।
class Animal:
    def __init__(self, name): self.name = name
class Cat(Animal):
    def __init__(self, name, indoor):
        super().__init__(name)
        self.indoor = indoor
cat = Cat('Whiskers', True)
print(cat.name, cat.indoor)

आर्ग्युमेंट के साथ super()

super(ChildClass, self) स्पष्ट रूप है, जो पाइथन 2 शैली में उपयोग होता था। पाइथन 3 में अधिकांश मामलों में बिना आर्ग्युमेंट के super() लिखा जा सकता है।
class A:
    def greet(self): return 'A'
class B(A):
    def greet(self): return super().greet() + 'B'
class C(B):
    def greet(self): return super().greet() + 'C'
print(C().greet())

सहकारी इनहेरिटेंस

एकाधिक इनहेरिटेंस में super() MRO का पालन करता है। हर क्लास का super() कॉल करना चेन में सभी क्लास के आरंभीकरण को सुनिश्चित करता है।
class A:
    def __init__(self): print('A init')
class B(A):
    def __init__(self): super().__init__(); print('B init')
class C(A):
    def __init__(self): super().__init__(); print('C init')
class D(B, C):
    def __init__(self): super().__init__(); print('D init')
D()

__str__ को ओवरराइड करना

इंस्टेंस किस तरह प्रिंट हों, इसे कस्टमाइज़ करने के लिए चाइल्ड में __str__ को ओवरराइड करें।
class Animal:
    def __init__(self, name): self.name = name
    def __str__(self): return f'Animal: {self.name}'
class Dog(Animal):
    def __str__(self): return f'Dog: {self.name}'
print(Dog('Rex'))

टेम्पलेट मेथड पैटर्न

पैरेंट एल्गोरिदम का ढाँचा परिभाषित करता है; चाइल्ड विशिष्ट मेथड को ओवरराइड करके चरणों को पूरा करती है।
class DataProcessor:
    def process(self):
        data = self.load()
        return self.transform(data)
    def load(self): return [1,2,3]
    def transform(self, d): return d
class Doubler(DataProcessor):
    def transform(self, d): return [x*2 for x in d]
print(Doubler().process())

सिबलिंग मेथड कॉल करना

super() और सही MRO के साथ, एकाधिक इनहेरिटेंस में सिबलिंग क्लास के मेथड को कॉल किया जा सकता है। इसे सहकारी super() कहते हैं।
class A:
    def hello(self): print('A')
class B(A):
    def hello(self): super().hello(); print('B')
class C(A):
    def hello(self): super().hello(); print('C')
class D(B,C):
    def hello(self): super().hello(); print('D')
D().hello()

__init_subclass__

किसी क्लास को सबक्लास बनाए जाने पर __init_subclass__ कॉल होता है। यह प्लगइन पंजीकरण पैटर्न के लिए उपयोगी है।
class Plugin:
    registry = []
    def __init_subclass__(cls, **kw):
        super().__init_subclass__(**kw)
        Plugin.registry.append(cls)
class A(Plugin): pass
class B(Plugin): pass
print([c.__name__ for c in Plugin.registry])

कब ओवरराइड न करें

यदि व्यवहार बदलने की आवश्यकता न हो, तो ओवरराइड न करें। अनावश्यक ओवरराइड से रखरखाव का बोझ बढ़ता है। असंबंधित व्यवहार के लिए कंपोज़िशन को प्राथमिकता दें।
# Good: only override what's needed
class Dog(Animal):
    def speak(self): return 'Woof'
    # No need to override __init__ if parent's is fine
print('override guidance')

त्वरित जाँच

पाइथन 3 में किसी मेथड के अंदर super() बिना आर्ग्युमेंट के किसे संदर्भित करता है?

पुनरावलोकन

चाइल्ड में फिर से परिभाषित करके ओवरराइड करें। super().method() पैरेंट वाले संस्करण को कॉल करता है। super().__init__() पैरेंट को आरंभ करता है। सहकारी super() MRO क्रम का पालन करता है।

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

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

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

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

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

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

क्या “विधि ओवरराइडिंग और super()” पाठ निःशुल्क है?

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

“विधि ओवरराइडिंग और super()” में मैं क्या सीखूँगा?

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

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

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

“विधि ओवरराइडिंग और super()” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

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