पॉलीमॉर्फिज्म का अर्थ है बहुरूप (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
पॉलीमॉर्फिज्म के लाभ:
- कोड पुन: उपयोगिता
- रखरखाव में आसानी
- एक्सटेंसिबिलिटी (नए आकार आसानी से जोड़े जा सकते हैं)
- क्लीनर इंटरफेस