[Python-3000] __hash__ : Problem with either documentation or understanding
Nick Coghlan
ncoghlan at gmail.com
Thu Jul 31 16:26:47 CEST 2008
Greg Ewing wrote:
> Nick Coghlan wrote:
>
>> Objects which compare equal must also end up in the same hash bucket
>> in order for dictionaries to work correctly.
>
> And, if its equality with another object can change during
> its lifetime, it will never work properly in a dictionary.
> So in that case you should leave __hash__ unimplemented so
> that you can't accidentally use one as a dict key.
As of 2.6b2 (and 3.0b2) you can actually set "__hash__ = None" to
explicitly block the inheritance of the method in a new-style class and
have Python correctly consider the type unhashable even though it has a
__hash__ attribute.
Making object.__hash__ inherited by default again in 2.6 while still
preserving useful behaviour for the collections.Hashable ABC turned out
to be a fairly interesting exercise...
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-3000
mailing list