পাইথনে কিছু বিশেষ ধরনের বিল্ট ইন মেথড আছে যেগুলোকে ম্যাজিক মেথড বলা হয়। এগুলার চেনার খুব সহজ উপায় হচ্ছে এদের নামের দুই পাসেই দুটো করে আন্ডারস্কোর সিম্বল থাকে। অর্থাৎ, __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__
ইত্যাদি