ম্যাজিক মেথড #
ক্লাস নিয়ে পড়াশুনা করতে গিয়ে আমরা __init__()
, __iter__()
, __next__()
এরকম কিছু মেথড দেখেছি। এই তিনটা বাদেও পাইথনে ডাবল আন্ডারস্কোর ঘেরা আরো অনেক স্পেশাল মেথড রয়েছে। এদেরকে ম্যাজিক মেথড বলে। কারণ এরা ক্লাসের কাজে-কর্মে স্রেফ ম্যাজিক নিয়ে আসে। আগে-পিছে দুইটা আন্ডারস্কোর থাকলে তাকে ডান্ডার (dunder) বলে। আর পড়ার সময় আন্ডারস্কোর আন্ডারস্কোর ইনিট আন্ডারস্কোর আন্ডারস্কোর এভাবে না বলে ‘ডান্ডার ইনিট’ এভাবে পড়া হয়।
পাইথনের অফিসিয়াল ডকে আমরা ম্যাজিক মেথড সম্পর্কে বিস্তারিত জানতে পারি। তবে এখানে আমরা গুরুত্বপূর্ণ কিছু ম্যাজিক মেথড সম্পর্কে জানব।
কন্সট্রাকশন ও ডেস্ট্রাকশন ম্যাজিক মেথড #
মেথড | বর্ণনা |
---|---|
__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
সামনের চাপ্টারগুলোতে আমরা হয়ত এদের আরো কিছু ইমপ্লিমেন্টেশন দেখব। তার আগ পর্যন্ত ম্যাজিক মেথডের ম্যাজিক শো এখানেই স্থগিত।