[Python-Dev] == on object tests identity in 3.x (original) (raw)
Andreas Maier andreas.r.maier at gmx.de
Mon Jul 7 13:22:27 CEST 2014
- Previous message: [Python-Dev] buildbot.python.org down again?
- Next message: [Python-Dev] == on object tests identity in 3.x
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message: [Python-Dev] buildbot.python.org down again?
- Next message: [Python-Dev] == on object tests identity in 3.x
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]