2015-06-04 5 views
6

nehme ich das folgende Programm haben:Verwendet __ne__ ein überschriebenes __eq__?

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

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

Wenn Sie es mit Python laufen ist der Ausgang True. Meine Frage ist

  1. die __ne__ Methode ist nicht implementiert, fällt Python auf einen Standard?
  2. Wenn Python auf eine Standardmethode fällt, um festzustellen, ob zwei Objekte gleich sind oder nicht, sollte es nicht __eq__ aufrufen und dann das Ergebnis negieren?

Antwort

12

Von the docs:

Es gibt keine implizite Beziehungen zwischen den Vergleichsoperatoren. Die Wahrheit von x==y bedeutet nicht, dass x!=y falsch ist. Dementsprechend sollte man beim Definieren von __eq__() auch __ne__() definieren, damit sich die Operatoren wie erwartet verhalten.

+0

Wenn also '' __ne__'' nicht implementiert ist, sollte Python keine Ausnahme auslösen, wenn ich ''! = '' Verwende, um zwei Objekte zu vergleichen? – dorafmon

+3

@dorafmon: nein, weil die Standardimplementierung '__eq__' nicht anspricht, gibt es einfach 'self is not other' zurück. –

Verwandte Themen