পাইথনে ম্যাজিক মেথডসমূহ
এই প্রবন্ধে পাইথনে ম্যাজিক মেথড সম্পর্কে ব্যাখ্যা করা হয়েছে।
YouTube Video
পাইথনে ম্যাজিক মেথডসমূহ
পাইথনের ম্যাজিক মেথড (বিশেষ মেথড) হল বিশেষভাবে নামকরণ করা মেথড যা ক্লাসকে বিশেষ আচরণ দিতে ব্যবহৃত হয়। উদাহরণস্বরূপ, এগুলো ডাবল আন্ডারস্কোর (ডান্ডার) দিয়ে পরিবেষ্টিত থাকে, যেমন __init__
এবং __str__
। তাই, এগুলো ডান্ডার মেথড নামেও পরিচিত।
ম্যাজিক মেথড সংজ্ঞায়িত করে আপনি ক্লাসের স্ট্যান্ডার্ড আচরণ নিজেস্বভাবে নির্ধারন করতে পারেন। উদাহরণস্বরূপ, __add__
সংজ্ঞায়িত করলে +
অপারেটরের আচরণ পরিবর্তন করা যায়।
শুরু এবং স্ট্রিং রিপ্রেজেন্টেশনের জন্য ম্যাজিক মেথডসমূহ
__init__
: ইনিশিয়ালাইজেশন মেথড
__init__
মেথডটি কনস্ট্রাক্টর, যা ইন্সট্যান্স তৈরির সময় স্বয়ংক্রিয়ভাবে ডাকা হয়।
1class Person:
2 def __init__(self, name, age):
3 self.name = name
4 self.age = age
5
6person = Person("Alice", 30)
7print(person.name) # Alice
__str__
: মানুষের পড়ার যোগ্য স্ট্রিং রিপ্রেজেন্টেশন
__str__
মেথড একটি মানুষের পড়ার উপযোগী স্ট্রিং রিপ্রেজেন্টেশন প্রদান করে। এটি print()
ও str()
দ্বারা ডাকা হয়।
1class Person:
2 def __init__(self, name):
3 self.name = name
4
5 def __str__(self):
6 return f"Person: {self.name}"
7
8person = Person("Bob")
9print(person) # Person: Bob
__repr__
: ডিবাগ-ভিত্তিক স্ট্রিং রিপ্রেজেন্টেশন
__repr__
মেথড ডিবাগের জন্য একটি স্ট্রিং রিপ্রেজেন্টেশন ফেরত দেয়। এটি repr()
ও ইন্টারপ্রিটারতে প্রদর্শনের সময় ব্যবহৃত হয়।
1class Person:
2 def __init__(self, name):
3 self.name = name
4
5 def __repr__(self):
6 return f"Person(name={self.name!r})"
7
8person = Person("Eve")
9print(repr(person)) # Person(name='Eve')
অ্যারিথমেটিক অপারেটর ওভারলোড করা
__add__
: +
অপারেটর
ম্যাজিক মেথড ব্যবহার করে অ্যারিথমেটিক অপারেটর ওভারলোড করা যায়। উদাহরণস্বরূপ, __add__
মেথড +
অপারেটর ওভারলোড করতে দেয়।
1class Vector:
2 def __init__(self, x, y):
3 self.x = x
4 self.y = y
5
6 def __add__(self, other):
7 return Vector(self.x + other.x, self.y + other.y)
8
9 def __repr__(self):
10 return f"Vector({self.x}, {self.y})"
11
12 # Other arithmetic magic methods:
13 # def __sub__(self, other): # Subtraction (-)
14 # def __mul__(self, other): # Multiplication (*)
15 # def __truediv__(self, other): # True division (/)
16 # def __floordiv__(self, other): # Floor division (//)
17 # def __mod__(self, other): # Modulo (%)
18 # def __pow__(self, other): # Exponentiation (**)
19
20v1 = Vector(1, 2)
21v2 = Vector(3, 4)
22print(v1 + v2) # Vector(4, 6)
অন্যান্য অ্যারিথমেটিক ম্যাজিক মেথডগুলি হলো:।
মেথড | অপারেটর |
---|---|
__add__ |
+ |
__sub__ |
- |
__mul__ |
* |
__truediv__ |
/ |
__floordiv__ |
// |
__mod__ |
% |
__pow__ |
** |
কম্পারিজন অপারেটর কাস্টমাইজেশন
আপনি চাইলে তুলনামূলক অপারেটরও ওভারলোড করতে পারেন। উদাহরণস্বরূপ, __eq__
মেথড সমতা নির্ণায়ক অপারেটর ওভারলোড করে।
1class Box:
2 def __init__(self, volume):
3 self.volume = volume
4
5 def __eq__(self, other):
6 return self.volume == other.volume
7
8 def __lt__(self, other):
9 return self.volume < other.volume
10
11 # Comparison magic methods:
12 # def __eq__(self, other): # Equal to (==)
13 # def __ne__(self, other): # Not equal to (!=)
14 # def __lt__(self, other): # Less than (<)
15 # def __le__(self, other): # Less than or equal to (<=)
16 # def __gt__(self, other): # Greater than (>)
17 # def __ge__(self, other): # Greater than or equal to (>=)
18
19b1 = Box(100)
20b2 = Box(200)
21
22print(b1 == b2) # False
23print(b1 < b2) # True
এছাড়াও নিচের ম্যাজিক মেথড গুলো রয়েছে:। এই ম্যাজিক মেথডসমূহ অবজেক্টগুলোর মধ্যে সমতা ও ক্ৰম সংক্রান্ত তুলনা নির্ধারণ করে।
অপারেটর | ম্যাজিক মেথড |
---|---|
== |
__eq__ |
!= |
__ne__ |
< |
__lt__ |
<= |
__le__ |
> |
__gt__ |
>= |
__ge__ |
কনটেইনার টাইপের জন্য ম্যাজিক মেথড
আপনি চাইলে এমন ক্লাস তৈরি করতে পারেন যা লিস্ট কিংবা ডিকশনারির মত আচরণ করবে।
__len__
: উপাদানের সংখ্যা প্রাপ্তি
__len__
মেথড এমন একটি ম্যাজিক মেথড যা উপাদানের সংখ্যা প্রদান করে।
1class Basket:
2 def __init__(self, items):
3 self.items = items
4
5 def __len__(self):
6 return len(self.items)
7
8basket = Basket(["apple", "banana"])
9print(len(basket)) # 2
__getitem__
: ইনডেক্স অ্যাক্সেস
ইনডেক্স ব্যবহার করে অ্যাক্সেস করার সময় __getitem__
মেথড ডাকা হয়।
1class Basket:
2 def __init__(self, items):
3 self.items = items
4
5 def __getitem__(self, index):
6 return self.items[index]
7
8basket = Basket(["apple", "banana"])
9print(basket[1]) # banana
__setitem__
এবং __delitem__
: লেখা ও মুছে ফেলা
__setitem__
ও __delitem__
মেথড আইটেম লেখার কিংবা মুছে ফেলার সময় ডাকা হয়।
1class Basket:
2 def __init__(self, items):
3 self.items = items
4
5 def __setitem__(self, index, value):
6 self.items[index] = value
7
8 def __delitem__(self, index):
9 del self.items[index]
10
11basket = Basket(["apple", "banana"])
12basket[1] = "grape"
13del basket[0]
14print(basket.items) # ['grape']
ইটারেশন-এর জন্য ম্যাজিক মেথড
for
লুপে কোনো অবজেক্টকে ইটারেবল করতে হলে, নিচেরগুলো ইমপ্লিমেন্ট করতে হবে:।
__iter__
এবং __next__
1class Counter:
2 def __init__(self, limit):
3 self.limit = limit
4 self.current = 0
5
6 def __iter__(self):
7 return self
8
9 def __next__(self):
10 if self.current >= self.limit:
11 raise StopIteration
12 self.current += 1
13 return self.current
14
15for num in Counter(3):
16 print(num)
17# Output:
18# 1
19# 2
20# 3
কনটেক্সট ম্যানেজার (with
স্টেটমেন্ট)
__enter__
ও __exit__
মেথড সংজ্ঞায়িত করে, আপনি with
স্টেটমেন্টের পূর্ব ও পরবর্তী প্রসেসিং নিয়ন্ত্রণ করতে পারেন।
1class FileOpener:
2 def __init__(self, filename):
3 self.filename = filename
4
5 def __enter__(self):
6 self.file = open(self.filename, 'r')
7 return self.file
8
9 def __exit__(self, exc_type, exc_val, exc_tb):
10 self.file.close()
11
12with FileOpener("example.txt") as f:
13 content = f.read()
14 print(content)
কলযোগ্য অবজেক্ট: __call__
__call__
মেথড সংজ্ঞায়িত করলে আপনি কোনো ইন্সট্যান্সকে ফাংশনের মতো কলযোগ্য করে তুলতে পারেন।
1class Greeter:
2 def __init__(self, greeting):
3 self.greeting = greeting
4
5 def __call__(self, name):
6 return f"{self.greeting}, {name}!"
7
8hello = Greeter("Hello")
9print(hello("Alice")) # Hello, Alice!
সারসংক্ষেপ
পাইথনের ম্যাজিক মেথডসমূহ ক্লাসে স্বাভাবিক ও স্বজ্ঞাত আচরণ যোগ করার একটি শক্তিশালী উপায়। প্রত্যেকটি মেথডের একটি স্পষ্ট উদ্দেশ্য রয়েছে, এবং সেগুলো যথাযথভাবে ইমপ্লিমেন্ট করলে আরও ফ্লেক্সিবল ও পাইথনিক কোড লেখা যায়।
ম্যাজিক মেথডসমূহ হল 'অদৃশ্য ইন্টারফেস' যা পাইথনের অবজেক্টগুলি কিভাবে পারস্পরিক ক্রিয়া ও আচরণ করে, তা গোপনে সহায়তা করে।
আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।