2015-06-04 20 views
6

Giả sử tôi có chương trình sau đây:Có __ne__ sử dụng một __eq__ ghi đè không?

class A(object):                                                                
    def __eq__(self, other): 
     return True 

a0 = A() 
a1 = A() 
print a0 != a1 

Nếu bạn chạy nó với Python đầu ra là True. Câu hỏi của tôi là

  1. phương thức __ne__ không được triển khai, Python có rơi vào chế độ mặc định không?
  2. nếu Python rơi vào phương pháp mặc định để xác định xem hai đối tượng có bằng nhau hay không, không nên gọi __eq__ và sau đó phủ nhận kết quả?

Trả lời

12

Từ the docs:

Không có mối quan hệ ngụ ý giữa các toán tử so sánh. Sự thật của x==y không hàm ý rằng x!=y là sai. Theo đó, khi xác định __eq__(), bạn cũng nên xác định __ne__() để các toán tử hoạt động như mong đợi.

+0

Vì vậy, nếu '' __ne__'' không được triển khai, không nên Python ném ngoại lệ nếu tôi sử dụng ''! = '' Để so sánh hai đối tượng? – dorafmon

+3

@dorafmon: không, bởi vì việc thực hiện mặc định không tham khảo '__eq__', nó chỉ đơn giản trả về' tự không phải là khác'. –

Các vấn đề liên quan