অপারেটর অভারলোডিং
আমরা আগের চ্যাপ্টারগুলোতে নানাবিধ অপারেশন দেখেছি - যোগ, বিয়োগ, গুন ভাগ ইত্যাদি । পাইথনের একটা চমৎকার ফিচার হচ্ছে এই অপারেটরগুলোর ফাংশনালিটি পরিবর্তন করা যায় ।
প্রথমেই আমরা দেখে নেই, এই অপারেটর গুলো আসলে কিভাবে কাজ করে । আমরা যখন কোন অপারেটর ব্যবহার করি, যেমন:
1
a = b + c
Copied!
পাইথন এই + অপারেশনের ফলাফল নির্নয়ের জন্য ইন্টারনালি b অবজেক্টের __add__ মেথডে আর্গুমেন্ট হিসেবে c কে পাস করে দেয় । ঐ মেথডের রিটার্ন ভ্যালুই হয় উক্ত অপারেশনের ফলাফল । অর্থাৎ, উপরে দেখানো অপারেশনটি আসলে এভাবে কাজ করে -
1
a = b.__add__(c)
Copied!
এখানে লক্ষ্য করুন, আপনি যদি এখন এই b অবজেক্টের __add__ মেথডটি পরিবর্তন করে দেন, তাহলে ঐ b অবজেক্টের উপর + অপারেশনের ফাংশনালিটিও পরিবর্তন হয়ে যাচ্ছে ।
এই জিনিসটাই হচ্ছে অপারটের ওভারলোডিং ।
আসুন একটি উদাহরন দেখে নেইঃ
1
class MyNum():
2
def __init__(self, value):
3
self.value = value
4
5
def __add__(self, other):
6
return (self.value * 2) + (other.value * 2)
7
8
9
a = MyNum(2)
10
b = MyNum(3)
11
12
c = a + b
13
14
print(c)
Copied!
উপরের উদাহরণে, MyNum ক্লাস এর ইন্সট্যান্স হিসেবে আমরা দুটো অবজেক্ট তৈরি করলাম এবং এদের প্রত্যেকের value সেট করলাম 2 এবং 3. এরপর এই দুটি অবজেক্টকে সাধারণ যোগ চিহ্ন দিয়ে যোগ করলাম। আমরা চাচ্ছি এই স্পেশাল নাম্বার দুটো একটু আলাদা ভাবে আমাদের নিজেদের মত করে যোগ হয়ে ফিরে আসুক। এক্ষেত্রে, c = a + b লাইনে বস্তুত c = a.__add__(b) স্টেটমেন্টটি এক্সিকিউট হবে। অর্থাৎ a অবজেক্টের __add__ মেথড কল হবে এবং এর মধ্যে প্রথমে 2 এর ভ্যালু দিগুণ হবে, অতঃপর b অবজেক্ট তথা other প্যারামিটার এর value 3 ও দিগুণ হবে। পরিশেষে এদের যোগ ফল রিটার্ন হবে। অর্থাৎ আউটপুট,
1
10
Copied!
আরও একটি উদাহরণ দেখে নেইঃ
1
class MyInt():
2
def __init__(self, value):
3
self.__value = value
4
5
def __int__(self):
6
return self.__value
7
8
def __add__(self, other):
9
return self.__value + int(other) * int(other)
10
11
12
a = MyInt(2)
13
b = MyInt(3)
14
15
c = a + b
16
17
print(c)
Copied!
কমন অপারেটর ও তাদের জন্য ব্যবহৃত স্পেশাল মেথড:
    + => __add__
    - => __sub__
    * => __mul__
    / => __div__
ইনপ্লেইস অপারেটর ওভারলোডিং ইনপ্লেইস অপারেটরগুলোর জন্যও এরকম মেথড রয়েছে । এগুলো হলো:
    __iadd__
    __isub__
    __imul__
    __idiv__
তাই আর ব্যখ্যায় না গিয়ে কোড দেখে ফেলি:
1
class MyInt():
2
def __init__(self, value):
3
self.__value = value
4
5
def __int__(self):
6
return self.__value
7
8
9
def __iadd__(self, other):
10
return self.__value + int(other) * int(other)
11
12
13
a = MyInt(2)
14
15
a += MyInt(3)
16
17
print(a)
Copied!
কোড রান না করেই আন্দাজ করে বলতে পারবেন আউটপুট কি আসতে পারে?
Last modified 3yr ago
Copy link