> For the complete documentation index, see [llms.txt](https://python.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://python.howtocode.dev/oop-python/magic-method.md).

# ম্যাজিক মেথড

পাইথনে কিছু বিশেষ ধরনের বিল্ট ইন মেথড আছে যেগুলোকে ম্যাজিক মেথড বলা হয়। এগুলার চেনার খুব সহজ উপায় হচ্ছে এদের নামের দুই পাসেই দুটো করে আন্ডারস্কোর সিম্বল থাকে। অর্থাৎ, `__init__` মেথডের মত। এই মেথডের সঙ্গে ইতোমধ্যে আমাদের পরিচয় হয়েছে। কোন ক্লাসে এই ম্যাজিক মেথড ব্যবহার করলে এবং পরবর্তীতে সেই ক্লাসের ইন্সট্যান্স তৈরির সময় এই ম্যাজিক মেথডটি স্বয়ংক্রিয় ভাবেই কল হয় যাতে করে এর মাধ্যমে কিছু সেটআপ রিলেটেড কাজ করে নেয়া যায়।

এই মেথড গুলোকে ভাষায় প্রকাশ করার সময় একটু জটিলতা হয়। যেমন, "আন্ডারস্কোর আন্ডারস্কোর ইনিট আন্ডারস্কোর আন্ডারস্কোর" এভাবে বললে অদ্ভুত শোনায়। তাই এদেরকে সুন্দর ভাবে "dunders" তথা "ডাণ্ডার ইনিট" এভাবে বলা হয়ে থাকে।

তো, এই `__init__` মেথড বাদেও অনেক গুলো ম্যাজিক মেথড আছে পাইথনে। ম্যাজিক মেথডের খুব বহুল ব্যবহার দেখা যায় অপারেটর অভারলোডিং এর সময় যা পরের চ্যাপ্টারেই আলোচনা করা হয়েছে। প্রত্যেকটি অপারেটর এর জন্যই একটি ম্যাজিক মেথড আছে। যেমন, `+` অপারেটর এর জন্য ম্যাজিক মেথডটি হচ্ছে `__add__`

ঘটনাটি এভাবে ঘটে, যদি আমাদের এমন একটি এক্সপ্রেশন থাকে `x+y` এবং `x` বস্তুত `K` ক্লাসের ইন্সট্যান্স হয়। তখন পাইথন `K` ক্লাসের ডেফিনেশন চেক করবে। যদি `K` ক্লাসের একটি মেথড থাকে `__add__` তাহলে সেটাকে কল করা হবে এভাবেঃ `x.__add__(y)`

কিছু কমন অপারেটরের ম্যাজিক মেথডঃ\
`__sub__` হচ্ছে `-` জন্য\
`__mul__` হচ্ছে `*` জন্য\
`__truediv__` হচ্ছে `/` জন্য\
`__floordiv__` হচ্ছে `//` জন্য\
`__mod__` হচ্ছে `%` জন্য\
`__pow__` হচ্ছে `**` জন্য\
`__and__` হচ্ছে `&` জন্য\
`__xor__` হচ্ছে `^` জন্য\
`__or__` হচ্ছে `|` জন্য

তুলনা করার অপারেটর গুলোর জন্যও পাইথনে ম্যাজিক মেথড আছেঃ\
`__lt__` হচ্ছে `<` জন্য\
`__le__` হচ্ছে `<=` জন্য\
`__eq__` হচ্ছে `==` জন্য\
`__ne__` হচ্ছে `!=` জন্য\
`__gt__` হচ্ছে `>` জন্য\
`__ge__` হচ্ছে `>=` জন্য

এছাড়াও আরও অনেক ম্যাজিক মেথড আছে পাইথনে যেমন - `__len__` `__getitem__` `__setitem__` `__delitem__` `__iter__` `__contains__` ইত্যাদি
