ম্যাজিক মেথড এবং ওভারলোডিং দুইটি গুরুত্বপূর্ণ ধারণা যা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) এ ব্যবহৃত হয়। এগুলি মূলত ক্লাসের কার্যকারিতা বাড়াতে সাহায্য করে। আসুন আমরা প্রতিটি ধারণার বিস্তারিত আলোচনা করি।
ম্যাজিক মেথড (Magic Methods)
ম্যাজিক মেথড হল পূর্বনির্ধারিত বিশেষ মেথড যা Python এবং অন্যান্য কিছু OOP ভাষায় ব্যবহৃত হয়। এগুলি সাধারণত ডাবল আন্ডারস্কোর (__) দিয়ে চিহ্নিত করা হয় এবং ক্লাসের অবজেক্টের বিভিন্ন আচরণ এবং কার্যকলাপ নিয়ন্ত্রণ করতে ব্যবহৃত হয়। ম্যাজিক মেথডগুলি স্বয়ংক্রিয়ভাবে কখনও কখনও ক্লাসের অবজেক্টের সাথে সংযুক্ত হয়।
সাধারণ ম্যাজিক মেথডের উদাহরণ
__init__: কনস্ট্রাক্টর, যা অবজেক্ট তৈরি করার সময় ডেটা ইনিশিয়ালাইজ করে।__str__: অবজেক্টের স্ট্রিং উপস্থাপনাকে নিয়ন্ত্রণ করে, যখনprint()ফাংশন ব্যবহার করা হয়।__repr__: অবজেক্টের অফিসিয়াল স্ট্রিং উপস্থাপনাকে নিয়ন্ত্রণ করে, যা ডেভেলপারদের জন্য ব্যবহারিক।__add__: প্লাস অপারেটর (+) ব্যবহারের সময় আচরণ নিয়ন্ত্রণ করে।__len__:len()ফাংশনের সময় আচরণ নিয়ন্ত্রণ করে।
__init__: কনস্ট্রাক্টর, যা অবজেক্ট তৈরি করার সময় কল হয়।
class Person:
def __init__(self, name):
self.name = name
person = Person("Alice")
print(person.name) # আউটপুট: Alice
__str__: অবজেক্টের একটি মানব-পঠনযোগ্য স্ট্রিং রিটার্ন করে।
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Person: {self.name}"
person = Person("Alice")
print(person) # আউটপুট: Person: Alice
__add__: দুইটি অবজেক্ট যোগ করার জন্য ব্যবহৃত হয়।
class Number:
def __init__(self, value):
self.value = value
def __add__(self, other):
return Number(self.value + other.value)
num1 = Number(10)
num2 = Number(20)
result = num1 + num2 # __add__ ম্যাজিক মেথড কল হবে
print(result.value) # আউটপুট: 30
__len__: অবজেক্টের দৈর্ঘ্য ফেরত দেয়।
class MyList:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
my_list = MyList([1, 2, 3])
print(len(my_list)) # আউটপুট: 3
ওভারলোডিং
ওভারলোডিং হলো একই নামের ফাংশন বা মেথডের একাধিক সংজ্ঞা প্রদান করা, যা বিভিন্ন প্রকার ইনপুট গ্রহণ করে। পাইথনে ক্লাসে মেথড ওভারলোডিং সরাসরি করা সম্ভব নয়, তবে আমরা আর্গুমেন্টের সংখ্যা এবং টাইপের ভিত্তিতে একই নামের ফাংশন তৈরি করতে পারি।
উদাহরণ:
class Math:
def add(self, a, b):
return a + b
def add(self, a, b, c): # একই নামের মেথড
return a + b + c
math = Math()
print(math.add(5, 10)) # আউটপুট: TypeError: add() missing 1 required positional argument: 'c'
print(math.add(5, 10, 15)) # আউটপুট: 30
পাইথনে, দ্বিতীয় add মেথডটি প্রথমটিকে ওভাররাইট করে, তাই এটি কাজ করবে না। তবে, মেথড ওভারলোডিং অর্জন করতে আমরা প্যারামিটারের সংখ্যা চেক করতে পারি।
সঠিক উদাহরণ:
class Math:
def add(self, *args): # ভ্যারিয়েবল লেন্থ আর্গুমেন্ট
return sum(args)
math = Math()
print(math.add(5, 10)) # আউটপুট: 15
print(math.add(5, 10, 15)) # আউটপুট: 30
সারসংক্ষেপ
- ম্যাজিক মেথড: ক্লাসের বিশেষ ধরনের মেথড যা অবজেক্টের আচরণ কাস্টমাইজ করে এবং বিশেষ পরিস্থিতিতে কল হয়।
- ওভারলোডিং: একই নামের ফাংশনের একাধিক সংজ্ঞা, যা বিভিন্ন আর্গুমেন্ট গ্রহণ করে। পাইথনে সরাসরি ওভারলোডিং সম্ভব নয়, তবে ভ্যারিয়েবল লেন্থ আর্গুমেন্ট ব্যবহার করে এটি অর্জন করা যায়।
এটি ক্লাসের কার্যকারিতা এবং আচরণকে কাস্টমাইজ করতে সাহায্য করে এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ।