ম্যাজিক মেথড
ক্লাস নিয়ে পড়াশুনা করতে গিয়ে আমরা __init__()
, __iter__()
, __next__()
এরকম কিছু মেথড দেখেছি। এই তিনটা বাদেও পাইথনে ডাবল আন্ডারস্কোর ঘেরা আরো অনেক স্পেশাল মেথড রয়েছে। এদেরকে ম্যাজিক মেথড বলে। কারণ এরা ক্লাসের কাজে-কর্মে স্রেফ ম্যাজিক নিয়ে আসে। আগে-পিছে দুইটা আন্ডারস্কোর থাকলে তাকে ডান্ডার (dunder) বলে। আর পড়ার সময় আন্ডারস্কোর আন্ডারস্কোর ইনিট আন্ডারস্কোর আন্ডারস্কোর এভাবে না বলে ‘ডান্ডার ইনিট’ এভাবে পড়া হয়।
পাইথনের অফিসিয়াল ডকে ( https://docs.python.org/3/reference/datamodel.html ) আমরা ম্যাজিক মেথড সম্পর্কে বিস্তারিত জানতে পারি। তবে এখানে আমরা গুরুত্বপূর্ণ কিছু ম্যাজিক মেথড সম্পর্কে জানব।
কন্সট্রাকশন ও ডেস্ট্রাকশন ম্যাজিক মেথড
মেথড | বর্ণনা |
---|---|
__init__(self, [...]) |
ক্লাস কন্সট্রাক্ট করে। |
__del__(self) |
ক্লাস ডেস্ট্রাক্ট করে। |
এই দুইটাকে ইমপ্লিমেন্ট করে একটা উদাহরণ দেখা যাক।
class MyClass:
"""A custom class for nothing"""
def __init__(self, var):
self.var = var
def __del__(self):
del self.var
কমপারিজন ম্যাজিক মেথড
মেথড | বর্ণনা |
---|---|
__cmp__(self, other) |
সমস্ত কমপারিজন অপারেটরের বাপ। |
__eq__(self, other) |
== অপারেটরের কাজ করে। |
__ne__(self, other) |
!= অপারেটরের কাজ করে। |
__lt__(self, other) |
< অপারেটরের কাজ করে। |
__gt__(self, other) |
> অপারেটরের কাজ করে। |
__le__(self, other) |
<= অপারেটরের কাজ করে। |
__ge__(self, other) |
>= অপারেটরের কাজ করে। |
কমপারিজন ম্যাজিক মেথডের একটা ইমপ্লিমেন্টেশন দেখা যাক।
class MyClass:
"""A custom class for nothing"""
def __init__(self, var):
self.var = var
def __del__(self):
del self.var
def __gt__(self, other):
return len(other) > len(self.var)
def __lt__(self, other):
return len(other) < len(self.var)
def __ge__(self, other):
return len(other) >= len(self.var)
def __le__(self, other):
return len(other) <= len(self.var)
অ্যারিথমেটিক ম্যাজিক মেথড
মেথড | বর্ণনা |
---|---|
__add__(self, other) |
+ অপারেটরের কাজ করে। |
__sub__(self, other) |
- অপারেটরের কাজ করে। |
__mul__(self, other) |
* অপারেটরের কাজ করে। |
__div__(self, other) |
/ অপারেটরের কাজ করে। |
__mod__(self, other) |
% অপারেটরের কাজ করে। |
__pow__ |
** অপারেটরের কাজ করে। |
__floordiv__(self, other) |
// অপারেটরের কাজ করে। |
অ্যারিথমেটিক ম্যাজিক মেথডের একটা ইমপ্লিমেন্টেশন দেখা যাক।
>>> a = 5
>>> b = 9
>>> a.__add__(b)
14
>>> b.__sub__(a)
4
>>> a.__mul__(b)
45
>>> b.__mul__(a)
45
>>> b.__mod__(a)
4
>>> b.__pow__(a)
59049
>>> b.__floordiv__(a)
1
>>
টাইপ কনভার্সন ম্যাজিক মেথড
মেথড | বর্ণনা |
---|---|
__int__(self) |
ইন্টিজারে কনভার্ট করে। |
__float__(self) |
ফ্লোটে কনভার্ট করে। |
__str__(self) |
হিউম্যান-রিড্যাবল স্ট্রিংয়ে কনভার্ট করে। |
__repr__(self) |
মেশিন-রিড্যাবল স্ট্রিংয়ে কনভার্ট করে। |
টাইপ কনভার্সন ম্যাজিক মেথডের একটা ইমপ্লিমেন্টেশন দেখা যাক।
>>> a = 5
>>> type(a)
<class 'int'>
>>> a = a.__float__()
>>> type(a)
<class 'float'>
>>> a = a.__str__()
>>> type(a)
<class 'str'>
>>> a = a.__repr__()
>>> type(a)
<class 'str'>
আরো কিছু ম্যাজিক মেথড
মেথড | বর্ণনা |
---|---|
__len__(self) |
কন্টেইনারের লেংথ রিটার্ন করে। |
__iter__(self) |
কন্টেইনারের জন্য ইটারেটর রিটার্ন করে। |
__contains__(self, item) |
আইটেমটি কন্টেইনারের মেম্বার কিনা টেস্ট করে। |
এদের কিছু ইমপ্লিমেন্টেশন দেখা যাক।
এদের কিছু ইমপ্লিমেন্টেশন দেখা যাক :
>>> a = 'Bangladesh'
>>> b = 'desh'
>>> a.__len__()
10
>>> a.__iter__()
<str_iterator object at 0x7f4c2c3c5a58>
>>> list(a.__iter__())
['B', 'a', 'n', 'g', 'l', 'a', 'd', 'e', 's', 'h']
>>> a.__contains__(b)
True
সামনের চাপ্টারগুলোতে আমরা হয়ত এদের আরো কিছু ইমপ্লিমেন্টেশন দেখব। তার আগ পর্যন্ত ম্যাজিক মেথডের ম্যাজিক শো এখানেই স্থগিত।