[Python-Dev] == on object tests identity in 3.x
Andreas Maier
andreas.r.maier at gmx.de
Mon Jul 7 13:22:27 CEST 2014
While discussing Python issue #12067
(http://bugs.python.org/issue12067#msg222442), I learned that Python 3.4
implements '==' and '!=' on the object type such that if no special
equality test operations are implemented in derived classes, there is a
default implementation that tests for identity (as opposed to equality
of the values).
The relevant code is in function do_richcompare() in Objects/object.c.
IMHO, that default implementation contradicts the definition that '=='
and '!=' test for equality of the values of an object.
Python 2.x does not seem to have such a default implementation; == and
!= raise an exception if attempted on objects that don't implement
equality in derived classes.
I'd like to gather comments on this issue, specifically:
-> Can someone please elaborate what the reason for that is?
-> Where is the discrepancy between the documentation of == and its
default implementation on object documented?
To me, a sensible default implementation for == on object would be (in
Python):
if v is w:
return True;
elif type(v) != type(w):
return False
else:
raise ValueError("Equality cannot be determined in default
implementation")
Andy
More information about the Python-Dev
mailing list