Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีใช้ Equality Operator (==) ในคลาส Python

หากใช้ 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__ และกลับค่าอัตโนมัติ