যদি নিচের কোডের মতো সমতা অপারেটর ব্যবহার করি, তবে আউটপুট আসবে False।
class Integer:
def __init__(self, number):
self.number = number
n1 = Integer(1)
n2 = Integer(1)
print bool(n1 == n2)
আউটপুট
False
এটি হয় কারণ পাইথন ডিফল্টভাবে কম্পারিজন অপারেশন-এর জন্য অবজেক্ট আইডেন্টিফায়ার ব্যবহার করে।
এই সমস্যা সমাধান করতে হলে __eq__ ফাংশন ওভাররাইড করতে হবে।
class Integer:
def __init__(self, number):
self.number = number
def __eq__(self, other):
if isinstance(self, other.__class__):
return self.__dict__ == other.__dict__
return False
n1 = Integer(1)
n2 = Integer(1)
print bool (n1 == n2)
print bool (n1 != n2)
আউটপুট
True True
পাইথন ২.এ, আমাদের __ne__ ফাংশনও ওভাররাইড করতে হয়। পাইথন ৩-এ এটি প্রয়োজন নেই। ডকুমেন্টেশন অনুযায়ী নিচের কথা সত্য।
ডিফল্টভাবে, __ne__() dele গেট করে __eq__()-র ফলাফল ইনভার্ট করে যদি সেটি NotImplemented না হয়। কম্পারিজন অপারেটরগুলোর মধ্যে অন্য কোনো ইমপ্লাইড রিলেশনশিপ নেই, উদাহরণস্বরূপ, (x<y or x==y)-এর সত্যতা x<=y ইমপ্লাই করে না।