equality & comparison by default (was Re: Too many 'self' in python.That's a big flaw in this language.)
Alex Martelli
aleax at mac.com
Wed Jun 27 11:39:57 EDT 2007
A.T.Hofkamp <hat at se-162.se.wtb.tue.nl> wrote:
> I think that again now with the default implementation of the
> object.__eq__ and object.__hash__ methods. I believe these methods should
> not exist until the programmer explicitly defines them with a suitable
> notion of equivalence.
>
> Anybody have a good argument against that? :-)
It's very common and practical (though not ideologically pure!) to want
each instance of a class to "stand for itself", be equal only to itself:
this lets me place instances in a set, etc, without fuss.
I don't want, in order to get that often-useful behavior, to have to
code a lot of boilerplate such as
def __hash__(self): return hash(id(self))
and the like -- so, I like the fact that object does it for me. I'd
have no objection if there were two "variants" of object (object itself
and politically_correct_object), inheriting from each other either way
'round, one of which kept the current practical approach while the other
made __hash__ and comparisons abstract.
In Python 3000, ordering comparisons will not exist by default (sigh, a
modest loss of practicality on the altar of purity -- ah well, saw it
coming, ever since complex numbers lost ordering comparisons), but
equality and hashing should remain just like now (yay!).
Alex
More information about the Python-list
mailing list