পলিমরফিজম মানে একাধিক রূপ। পাইথনে আমরা একই অপারেটর বা ফাংশন খুঁজে পেতে পারি যা একাধিক ফর্ম গ্রহণ করে। এটি বিভিন্ন ক্লাস তৈরি করতেও দরকারী যার একই নামের সাথে ক্লাস পদ্ধতি থাকবে। এটি অনেক কোড পুনরায় ব্যবহার করতে সাহায্য করে এবং কোড জটিলতা হ্রাস করে। পলিমরফিজম উত্তরাধিকারের সাথেও যুক্ত কারণ আমরা নীচের কিছু উদাহরণে দেখতে পাব।
অপারেটরগুলিতে পলিমরফিজম
+ অপারেটর দুটি ইনপুট নিতে পারে এবং ইনপুটগুলি কী তা নির্ভর করে আমাদের ফলাফল দিতে পারে। নীচের উদাহরণগুলিতে আমরা দেখতে পাচ্ছি যে কীভাবে পূর্ণসংখ্যার ইনপুটগুলি একটি পূর্ণসংখ্যা দেয় এবং যদি একটি ইনপুট ফ্লোট হয় তবে ফলাফলটি ফ্লোটে পরিণত হয়। এছাড়াও স্ট্রিং জন্য, তারা সহজভাবে সংযুক্ত করা হয়. পাইথনে + অপারেটর তৈরি হওয়ার কারণে এটি স্বয়ংক্রিয়ভাবে ঘটে।
উদাহরণ
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 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))
print(len(tup))
print(len(lst))
print(len(dict)) উপরের কোডটি চালানো আমাদের নিম্নলিখিত ফলাফল দেয় -
আউটপুট
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
# Initialize the classes
rec = Rectangle(5,3)
cr = Circle(4)
print("Perimter of rectangel: ",rec.perimeter())
print("Area of rectangel: ",rec.area())
print("Perimter of Circle: ",cr.perimeter())
print("Area of Circle: ",cr.area()) উপরের কোডটি চালানো আমাদের নিম্নলিখিত ফলাফল দেয় -
আউটপুট
Perimter of rectangel: 16 Area of rectangel: 15 Perimter of Circle: 25.132741228718345 Area of Circle: 50.26548245743669