> 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/operator-overloading.md). # অপারেটর অভারলোডিং আমরা আগের চ্যাপ্টারগুলোতে নানাবিধ অপারেশন দেখেছি - যোগ, বিয়োগ, গুন ভাগ ইত্যাদি । পাইথনের একটা চমৎকার ফিচার হচ্ছে এই অপারেটরগুলোর ফাংশনালিটি পরিবর্তন করা যায় । প্রথমেই আমরা দেখে নেই, এই অপারেটর গুলো আসলে কিভাবে কাজ করে । আমরা যখন কোন অপারেটর ব্যবহার করি, যেমন: ``` a = b + c ``` পাইথন এই `+` অপারেশনের ফলাফল নির্নয়ের জন্য ইন্টারনালি `b` অবজেক্টের `__add__` মেথডে আর্গুমেন্ট হিসেবে `c` কে পাস করে দেয় । ঐ মেথডের রিটার্ন ভ্যালুই হয় উক্ত অপারেশনের ফলাফল । অর্থাৎ, উপরে দেখানো অপারেশনটি আসলে এভাবে কাজ করে - ``` a = b.__add__(c) ``` এখানে লক্ষ্য করুন, আপনি যদি এখন এই `b` অবজেক্টের `__add__` মেথডটি পরিবর্তন করে দেন, তাহলে ঐ `b` অবজেক্টের উপর `+` অপারেশনের ফাংশনালিটিও পরিবর্তন হয়ে যাচ্ছে । এই জিনিসটাই হচ্ছে অপারটের ওভারলোডিং । আসুন একটি উদাহরন দেখে নেইঃ ```python class MyNum(): def __init__(self, value): self.value = value def __add__(self, other): return (self.value * 2) + (other.value * 2) a = MyNum(2) b = MyNum(3) c = a + b print(c) ``` উপরের উদাহরণে, `MyNum` ক্লাস এর ইন্সট্যান্স হিসেবে আমরা দুটো অবজেক্ট তৈরি করলাম এবং এদের প্রত্যেকের `value` সেট করলাম `2` এবং `3`. এরপর এই দুটি অবজেক্টকে সাধারণ যোগ চিহ্ন দিয়ে যোগ করলাম। আমরা চাচ্ছি এই স্পেশাল নাম্বার দুটো একটু আলাদা ভাবে আমাদের নিজেদের মত করে যোগ হয়ে ফিরে আসুক। এক্ষেত্রে, `c = a + b` লাইনে বস্তুত `c = a.__add__(b)` স্টেটমেন্টটি এক্সিকিউট হবে। অর্থাৎ `a` অবজেক্টের `__add__` মেথড কল হবে এবং এর মধ্যে প্রথমে `2` এর ভ্যালু দিগুণ হবে, অতঃপর `b` অবজেক্ট তথা `other` প্যারামিটার এর `value` `3` ও দিগুণ হবে। পরিশেষে এদের যোগ ফল রিটার্ন হবে। অর্থাৎ আউটপুট, ```python 10 ``` আরও একটি উদাহরণ দেখে নেইঃ ```python class MyInt(): def __init__(self, value): self.__value = value def __int__(self): return self.__value def __add__(self, other): return self.__value + int(other) * int(other) a = MyInt(2) b = MyInt(3) c = a + b print(c) ``` কমন অপারেটর ও তাদের জন্য ব্যবহৃত স্পেশাল মেথড: * `+` => `__add__` * `-` => `__sub__` * `*` => `__mul__` * `/` => `__div__` **ইনপ্লেইস অপারেটর ওভারলোডিং**\ ইনপ্লেইস অপারেটরগুলোর জন্যও এরকম মেথড রয়েছে । এগুলো হলো: * `__iadd__` * `__isub__` * `__imul__` * `__idiv__` তাই আর ব্যখ্যায় না গিয়ে কোড দেখে ফেলি: ```python class MyInt(): def __init__(self, value): self.__value = value def __int__(self): return self.__value def __iadd__(self, other): return self.__value + int(other) * int(other) a = MyInt(2) a += MyInt(3) print(a) ``` কোড রান না করেই আন্দাজ করে বলতে পারবেন আউটপুট কি আসতে পারে? \
সংকলন - [আবু আশরাফ মাসনুন](http://facebook.com/masnun)