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

पायथन में पॉलीमॉर्फिज्म (बहुरूपता)

पॉलीमॉर्फिज्म का अर्थ है बहुरूप (multiple forms)। पायथन में हम एक ही ऑपरेटर या फ़ंक्शन को कई रूप लेते हुए पा सकते हैं। यह विभिन्न वर्गों (classes) को बनाने में भी उपयोगी है जिनमें समान नाम के क्लास मेथड्स हों। इससे बहुत सारे कोड का पुन: उपयोग होता है और कोड जटिलता कम होती है। पॉलीमॉर्फिज्म विरासत (inheritance) से भी जुड़ा हुआ है जैसा कि हम नीचे कुछ उदाहरणों में देखेंगे।

ऑपरेटर्स में पॉलीमॉर्फिज्म

+ ऑपरेटर दो इनपुट ले सकता है और हमें परिणाम दे सकता है जो इस बात पर निर्भर करता है कि इनपुट क्या हैं। नीचे दिए गए उदाहरणों में हम देख सकते हैं कि कैसे पूर्णांक इनपुट पूर्णांक परिणाम देते हैं और यदि इनपुट में से एक फ्लोट है तो परिणाम फ्लोट बन जाता है। स्ट्रिंग्स के लिए, वे बस जुड़ (concatenate) जाती हैं। यह स्वचालित रूप से होता है क्योंकि पायथन में + ऑपरेटर इसी तरह बनाया गया है।

उदाहरण

a = 23
b = 11
c = 9.5
s1 = "Hello"
s2 = "There!"

print(a + b)        # 34
print(type(a + b))  # 

print(b + c)        # 20.5
print(type(b + c))  # 

print(s1 + s2)      # HelloThere!
print(type(s1 + s2)) # 

उपरोक्त कोड चलाने से हमें निम्न परिणाम मिलता है:

आउटपुट

34
20.5
HelloThere!

बिल्ट-इन फ़ंक्शन्स में पॉलीमॉर्फिज्म

हम यह भी देख सकते हैं कि विभिन्न पायथन फ़ंक्शन्स विभिन्न प्रकार के इनपुट ले सकते हैं और फिर उन्हें अलग-अलग तरीके से प्रोसेस कर सकते हैं। जब हम len() को स्ट्रिंग मान देते हैं तो यह इसमें हर अक्षर गिनता है। लेकिन अगर हम टुपल या डिक्शनरी इनपुट के रूप में देते हैं, तो यह उन्हें अलग तरीके से प्रोसेस करता है।

उदाहरण

str = 'Hi There !'
tup = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri')
lst = ['Jan', 'Feb', 'Mar', 'Apr']
dict = {'1D': 'Line', '2D': 'Triangle', '3D': 'Sphere'}

print(len(str))  # 10
print(len(tup))  # 5
print(len(lst))  # 4
print(len(dict)) # 3

उपरोक्त कोड चलाने से हमें निम्न परिणाम मिलता है:

आउटपुट

10
5
4
3

यूजर-डिफाइंड मेथड्स में पॉलीमॉर्फिज्म

हम समान नाम के मेथड्स बना सकते हैं लेकिन अलग-अलग क्लास नामों के अंतर्गत रैप किए गए। इसलिए हम उसी मेथड को अलग-अलग क्लास नाम प्रीफिक्स के साथ कॉल करके अलग परिणाम प्राप्त कर सकते हैं। नीचे दिए गए उदाहरण में हमारे पास दो क्लासेस हैं, रेक्टेंगल और सर्कल, जिनसे हम समान मेथड्स का उपयोग करके उनका परिमाप और क्षेत्रफल प्राप्त करते हैं।

उदाहरण

from math import pi

class Rectangle:
    def __init__(self, length, breadth):
        self.l = length
        self.b = breadth
    
    def perimeter(self):
        return 2 * (self.l + self.b)
    
    def area(self):
        return self.l * self.b

class Circle:
    def __init__(self, radius):
        self.r = radius
    
    def perimeter(self):
        return 2 * pi * self.r
    
    def area(self):
        return pi * self.r ** 2

# क्लासेस इनिशियलाइज़ करें
rec = Rectangle(5, 3)
cr = Circle(4)

print("Perimeter of rectangle: ", rec.perimeter())
print("Area of rectangle: ", rec.area())
print("Perimeter of Circle: ", cr.perimeter())
print("Area of Circle: ", cr.area())

उपरोक्त कोड चलाने से हमें निम्न परिणाम मिलता है:

आउटपुट

Perimeter of rectangle: 16
Area of rectangle: 15
Perimeter of Circle: 25.132741228718345
Area of Circle: 50.26548245743669

पॉलीमॉर्फिज्म के लाभ:

  • कोड पुन: उपयोगिता
  • रखरखाव में आसानी
  • एक्सटेंसिबिलिटी (नए आकार आसानी से जोड़े जा सकते हैं)
  • क्लीनर इंटरफेस
  1. Tkinter Python में संकुचनशील फलक Tkinter Python में संकुचनशील फलक

    Tkinter Python का GUI बिल्डिंग लाइब्रेरी है। इस लेख में हम देखेंगे कि हम संकुचनशील फलक कैसे बना सकते हैं। वे उपयोगी होते हैं जब हमारे पास GUI कैनवास पर प्रदर्शित करने के लिए बड़ी मात्रा में डेटा होता है लेकिन हम इसे हमेशा प्रदर्शित नहीं करना चाहते। इसे संकुचनशील बनाया जाता है ताकि इसे आवश्यकतानुसार

  1. पायथन में बाइनरी ट्री का व्यास पायथन में बाइनरी ट्री का व्यास

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें ट्री के व्यास की लंबाई की गणना करनी है। बाइनरी ट्री का व्यास वास्तव में ट्री में किन्हीं दो नोड्स के बीच सबसे लंबे पथ की लंबाई है। यह पथ अनिवार्य रूप से रूट से होकर नहीं जाता। यदि ट्री नीचे जैसा है, तो व्यास 3 होगा क्योंकि पथ [4,2,1,3] या [5,2,1,3] की लंब

  1. पायथन में इनहेरिटेंस (Inheritance) पायथन में इनहेरिटेंस (Inheritance)

    इस लेख में, हम पायथन 3.x या उससे पहले के संस्करण में इनहेरिटेंस और क्लासेस को एक्सटेंड करने के बारे में जानेंगे।इनहेरिटेंस वास्तविक दुनिया के संबंधों को अच्छी तरह से दर्शाता है, पुन: प्रयोज्यता प्रदान करता है और ट्रांजिटिविटी का समर्थन करता है। यह तेज़ विकास समय, आसान रखरखाव और विस्तार में आसानी प्र