Python Academy · पाठ

पॉलीमॉर्फ़िज़्म और डक टाइपिंग

ऐसा पॉलीमॉर्फ़िक कोड लिखें जो किसी भी संगत ऑब्जेक्ट के साथ काम करे।

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

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

परिचय

बहुरूपता अलग-अलग ऑब्जेक्ट को एक ही इंटरफ़ेस पर प्रतिक्रिया देने की सुविधा देती है। डक टाइपिंग का अर्थ है: यदि कोई ऑब्जेक्ट बत्तख जैसा व्यवहार करता है, तो वह बत्तख है।

बहुरूपता क्या है

बहुरूपता का अर्थ है 'कई रूप'। एक ही विधि का नाम अलग-अलग ऑब्जेक्ट पर अलग तरह से काम करता है। Python में इसका व्यापक रूप से उपयोग किया जाता है।
class Cat:
    def speak(self): return 'Meow'
class Dog:
    def speak(self): return 'Woof'
for animal in [Cat(), Dog()]:
    print(animal.speak())

डक टाइपिंग

Python में बहुरूपता के लिए वर्गों का पदानुक्रम आवश्यक नहीं है। यदि किसी ऑब्जेक्ट में सही विधि है, तो वह काम करता है। इंटरफ़ेस की आवश्यकता नहीं होती।
class Duck:
    def quack(self): return 'Quack'
class Person:
    def quack(self): return 'I am quacking like a duck'
def make_it_quack(duck):
    print(duck.quack())
make_it_quack(Duck())
make_it_quack(Person())

बहुरूपी फ़ंक्शन

len() स्ट्रिंग, सूचियों, डिक्शनरी और टपल पर काम करता है—क्योंकि वे सभी __len__ लागू करते हैं। यह अंतर्निहित बहुरूपता है।
for obj in ['hello', [1,2,3], {'a':1}]:
    print(type(obj).__name__, len(obj))

ऑपरेटर ओवरलोडिंग

+ ints, floats, strings और lists पर काम करता है, क्योंकि प्रत्येक इसे __add__ के माध्यम से अलग तरीके से लागू करता है।
print(1 + 2)        # int addition
print('a' + 'b')    # string concat
print([1] + [2])    # list concat

प्रोटोकॉल-आधारित डक टाइपिंग

इटरेशन प्रोटोकॉल: __iter__ और __next__ वाला कोई भी ऑब्जेक्ट for लूप में काम करता है—किसी आधार वर्ग की आवश्यकता नहीं होती।
class Squares:
    def __init__(self, n): self.n,self.i=n,0
    def __iter__(self): return self
    def __next__(self):
        if self.i>=self.n: raise StopIteration
        x=self.i**2; self.i+=1; return x
print(list(Squares(5)))

EAFP बनाम LBYL

EAFP (Easier to Ask Forgiveness than Permission) try/except का उपयोग करता है। LBYL (Look Before You Leap) if/hasattr का उपयोग करता है। Python EAFP को प्राथमिकता देता है।
# LBYL:
if hasattr(obj, 'quack'):
    obj.quack()
# EAFP (Pythonic):
try:
    'hello'.quack()
except AttributeError:
    print('no quack')

सुरक्षित डिस्पैच के लिए isinstance()

जब आपको प्रकार-विशिष्ट व्यवहार चाहिए, तो AttributeError पकड़ने की तुलना में isinstance() अधिक साफ़ तरीका है।
def process(data):
    if isinstance(data, str):
        return data.upper()
    elif isinstance(data, list):
        return [x*2 for x in data]
print(process('hi'))
print(process([1,2,3]))

प्रोटोकॉल के रूप में एब्स्ट्रैक्ट बेस क्लास

from abc import ABC, abstractmethod औपचारिक प्रोटोकॉल परिभाषित करता है। उपवर्गों को अमूर्त विधियाँ लागू करनी होती हैं।
from abc import ABC, abstractmethod
class Drawable(ABC):
    @abstractmethod
    def draw(self): pass
class Circle(Drawable):
    def draw(self): print('O')
Circle().draw()

typing.Protocol (3.8+)

class MyProtocol(Protocol): ABC के बिना संरचनात्मक उपप्रकारण परिभाषित करता है। यह स्थैतिक जाँच के लिए mypy के साथ काम करता है।
from typing import Protocol
class Quackable(Protocol):
    def quack(self) -> str: ...
def make_quack(x: Quackable) -> str:
    return x.quack()
print('protocol demo')

व्यवहार में बहुरूपता

ऐसे API डिज़ाइन करें जो सही इंटरफ़ेस वाले किसी भी ऑब्जेक्ट को स्वीकार करें। इससे आपके कोड को संशोधन के बिना विस्तार योग्य बनाया जा सकता है।
class JSONSerializer:
    def serialize(self, obj): import json; return json.dumps(obj)
class XMLSerializer:
    def serialize(self, obj): return f'<data>{obj}</data>'
def export(data, serializer):
    return serializer.serialize(data)
print(export({'x': 1}, JSONSerializer()))

त्वरित जाँच

Python में डक टाइपिंग का क्या अर्थ है?

पुनरावलोकन

बहुरूपता: एक ही इंटरफ़ेस, अलग व्यवहार। डक टाइपिंग: प्रकार नहीं, बल्कि व्यवहार महत्वपूर्ण है। प्रोटोकॉल अनौपचारिक रूप से इंटरफ़ेस परिभाषित करते हैं। EAFP (try/except) Python-संगत तरीका है।

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

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

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

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

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

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

क्या “पॉलीमॉर्फ़िज़्म और डक टाइपिंग” पाठ निःशुल्क है?

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

“पॉलीमॉर्फ़िज़्म और डक टाइपिंग” में मैं क्या सीखूँगा?

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

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

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

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

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

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

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

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

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