পলিমরফিজম (Polymorphism) শব্দের অর্থ হলো "বহু রূপ" (multiple forms)। পাইথনে একই অপারেটর বা ফাংশন একাধিক রূপ নিতে পারে। এটি ডিফারেন্ট ক্লাসে একই নামের মেথড থাকতে দেয় যা কোড রি-ইউজ বাড়ায় এবং জটিলতা কমায়। পলিমরফিজম ইনহেরিটেন্সের (inheritance) সাথে ও জড়িত।
অপারেটরে পলিমরফিজম
+ অপারেটর দুটি ইনপুট নেয় এবং ইনপুটের টাইপ অনুযায়ী রেজাল্ট দেয়। নিচের উদাহরণে দেখানো হয়েছে কিভাবে ইন্টিজার ইনপুট ইন্টিজার দেয়, ফ্লোইন্ট ইনপুট দিলে ফ্লোয়াট দেয়, আর স্ট্রিং দিলে কনক্যাটেনেশন হয়। এটি পাইথনের + অপারেটর ডিজাইন করার কারনে স্বয়ংক্রিয়ভাবে হয়।
উদাহরণ
a = 23 b = 11 c = 9.5 s1 = "Hello" s2 = "There!" print(a + b) print(type(a + b)) print(b + c) print(type(b + c)) print(s1 + s2) print(type(s1 + s2))
উপরের কোড রান করলে নিচের রেজাল্ট মিলবে:
আউটপুট
34 34 20.5 20.5 HelloThere! 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))
print(len(tup))
print(len(lst))
print(len(dict))
উপরের কোড রান করলে নিচের রেজাল্ট মিলবে:
আউটপুট
10 5 4 3
ইউজার-ডিফাইন্ড মেথডে পলিমরফিজম
আমরা একই নামে মেথড তৈরি করতে পারি কিন্তু ভিন্ন ক্লাসের আওতাতে। তাই আমরা একই মেথড নেম কল করতে পারি কিন্তু ক্লাস নেম প্রিফিক্স দিয়ে ডিফারেন্ট রেজাল্ট পেতে। নিচের উদাহরণে দুটি ক্লাস Rectangle এবং Circle আছে যাদের একই নামের perimeter() এবং area() মেথড আছে।
উদাহরণ
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
# Initialize the classes
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