หากใช้ Equality Operator โดยไม่กำหนดเอง จะได้ False เพราะ Python เปรียบเทียบ Object Identifier (Memory Address)
class Integer:
def __init__(self, number):
self.number = number
n1 = Integer(1)
n2 = Integer(1)
print(bool(n1 == n2)) # False
แก้ไขด้วยการ Override __eq__
class Integer:
def __init__(self, number):
self.number = number
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.__dict__ == other.__dict__
return False
n1 = Integer(1)
n2 = Integer(1)
print(bool(n1 == n2)) # True
print(bool(n1 != n2)) # False (Python 3 ใช้ __eq__ สำหรับ != อัตโนมัติ)
Python 2.x ต้อง Override __ne__ ด้วย แต่ Python 3.x ไม่ต้อง เพราะ __ne__ จะ delegate ให้ __eq__ และกลับค่าอัตโนมัติ