यदि हम नीचे दिए गए कोड में इक्वेलिटी ऑपरेटर का उपयोग करते हैं, तो हमें आउटपुट के रूप में False मिलता है:
class Integer:
def __init__(self, number):
self.number = number
n1 = Integer(1)
n2 = Integer(1)
print(bool(n1 == n2))
आउटपुट:
False
ऐसा इसलिए है क्योंकि Python डिफ़ॉल्ट रूप से तुलना ऑपरेशन के लिए ऑब्जेक्ट आइडेंटिफ़ायर का उपयोग करता है:
इस समस्या को दूर करने के लिए हमें __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
Python 2.x के लिए, हमें __ne__ फंक्शन को भी ओवरराइड करना होगा। Python 3.x के लिए यह आवश्यक नहीं है। डॉक्यूमेंटेशन के अनुसार निम्न सत्य है:
डिफ़ॉल्ट रूप से, __ne__() __eq__() को डेलीगेट करता है और परिणाम को इनवर्ट करता है जब तक कि यह NotImplemented न हो। तुलना ऑपरेटर्स के बीच कोई अन्य निहित संबंध नहीं हैं, उदाहरण के लिए, (x<y या x==y) की सच्चाई x<=y का अर्थ नहीं निकालती।