Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để chúng ta sử dụng toán tử tương đương (“bình đẳng”) trong các lớp Python?

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