রিভার্সড সেট অপারেটর হলো যেসব অপারেটরের রাইট অপারেন্ডের মেথড কল হয়। যেমন:
s & z→s.__and__(z)z & s→s.__rand__(z)(রিভার্সড)
কখন কাজে লাগে
- ইনহেরিটেন্স/সাবক্লাসিং: ডানপাশের অপারেন্ড বামপাশের সাবক্লাস হলে রিভার্সড অপারেশন প্রথমে ট্রাই হয়। পেরেন্ট এবং চাইল্ড ক্লাসে আলাদা ইমপ্লিমেন্টেশন থাকতে পারে।
- NotImplemented ফলব্যাক: বামপাশের অপারেন্ড
NotImplementedরিটার্ন করলে রিভার্সড অপারেশন ট্রাই হয়।
উদাহরণ
class A:
def __and__(self, other):
return "A.__and__"
class B(A):
def __rand__(self, other):
return "B.__rand__"
a = A()
b = B()
print(a & b) # A.__and__ (b, B হলো A-এর সাবক্লাস না)
print(b & a) # B.__rand__ (a, A হলো B-এর সাবক্লাস না, কিন্তু বামপাশ B)
সাধারণ অপারেশনে (int, str, etc.) রিভার্সড অপারেটরগুলো খুব কমই প্রয়োজন হয়, কারণ বিল্ট-ইন টাইপগুলো সিমেট্রিক্যালি বিহেভ করে।