Nếu chúng ta sử dụng toán tử bình đẳng như trong đoạn mã bên dưới, chúng ta sẽ nhận được sai ở đầu ra
class Integer: def __init__(self, number): self.number = number n1 = Integer(1) n2 = Integer(1) print bool(n1 == n2)
Đầu ra
False
Điều này là do Python theo mặc định sử dụng các mã định danh đối tượng cho các hoạt động so sánh:
Để khắc phục sự cố này, chúng tôi phải ghi đè __eq__ Chức năng
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)
Đầu ra
True True
Đối với Python 2.x, chúng ta cũng phải ghi đè hàm __ne__. Điều này không cần thiết đối với Python 3.x. Theo tài liệu sau đây đúng.
Theo mặc định, __ne __ () ủy quyền cho __eq __ () và đảo ngược kết quả trừ khi nó không phải là NotImplemented. Không có mối quan hệ ngụ ý nào khác giữa các toán tử so sánh, ví dụ:chân lý của (x