অপারেটর অভারলোডিং
আমরা আগের চ্যাপ্টারগুলোতে নানাবিধ অপারেশন দেখেছি - যোগ, বিয়োগ, গুন ভাগ ইত্যাদি । পাইথনের একটা চমৎকার ফিচার হচ্ছে এই অপারেটরগুলোর ফাংশনালিটি পরিবর্তন করা যায় ।
প্রথমেই আমরা দেখে নেই, এই অপারেটর গুলো আসলে কিভাবে কাজ করে । আমরা যখন কোন অপারেটর ব্যবহার করি, যেমন:
পাইথন এই +
অপারেশনের ফলাফল নির্নয়ের জন্য ইন্টারনালি b
অবজেক্টের __add__
মেথডে আর্গুমেন্ট হিসেবে c
কে পাস করে দেয় । ঐ মেথডের রিটার্ন ভ্যালুই হয় উক্ত অপারেশনের ফলাফল । অর্থাৎ, উপরে দেখানো অপারেশনটি আসলে এভাবে কাজ করে -
এখানে লক্ষ্য করুন, আপনি যদি এখন এই b
অবজেক্টের __add__
মেথডটি পরিবর্তন করে দেন, তাহলে ঐ b
অবজেক্টের উপর +
অপারেশনের ফাংশনালিটিও পরিবর্তন হয়ে যাচ্ছে ।
এই জিনিসটাই হচ্ছে অপারটের ওভারলোডিং ।
আসুন একটি উদাহরন দেখে নেইঃ
উপরের উদাহরণে, MyNum
ক্লাস এর ইন্সট্যান্স হিসেবে আমরা দুটো অবজেক্ট তৈরি করলাম এবং এদের প্রত্যেকের value
সেট করলাম 2
এবং 3
. এরপর এই দুটি অবজেক্টকে সাধারণ যোগ চিহ্ন দিয়ে যোগ করলাম। আমরা চাচ্ছি এই স্পেশাল নাম্বার দুটো একটু আলাদা ভাবে আমাদের নিজেদের মত করে যোগ হয়ে ফিরে আসুক। এক্ষেত্রে, c = a + b
লাইনে বস্তুত c = a.__add__(b)
স্টেটমেন্টটি এক্সিকিউট হবে। অর্থাৎ a
অবজেক্টের __add__
মেথড কল হবে এবং এর মধ্যে প্রথমে 2
এর ভ্যালু দিগুণ হবে, অতঃপর b
অবজেক্ট তথা other
প্যারামিটার এর value
3
ও দিগুণ হবে। পরিশেষে এদের যোগ ফল রিটার্ন হবে। অর্থাৎ আউটপুট,
আরও একটি উদাহরণ দেখে নেইঃ
কমন অপারেটর ও তাদের জন্য ব্যবহৃত স্পেশাল মেথড:
+
=>__add__
-
=>__sub__
*
=>__mul__
/
=>__div__
ইনপ্লেইস অপারেটর ওভারলোডিং ইনপ্লেইস অপারেটরগুলোর জন্যও এরকম মেথড রয়েছে । এগুলো হলো:
__iadd__
__isub__
__imul__
__idiv__
তাই আর ব্যখ্যায় না গিয়ে কোড দেখে ফেলি:
কোড রান না করেই আন্দাজ করে বলতে পারবেন আউটপুট কি আসতে পারে?
সংকলন - আবু আশরাফ মাসনুন
Last updated