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