[Python-Dev] getting rid of default object.__hash__ (SF 660098)
Guido van Rossum
guido at python.org
Mon Dec 22 16:32:15 EST 2003
> >Since the default hash simply takes id() of the object, it's easy to
> >fix such code once the failure is understood though.
>
> Jython 2.2a0 on java1.4.0_02 (JIT: null)
> Type "copyright", "credits" or "license" for more information.
> >>> class C: pass
> ...
> >>> id(C)
> 1
> >>> hash(C)
> 9174506
> >>>
>
> I see, but then there should be probably be a different way to spell
> the default hash, because id is not a sensible option for Jython etc
Ow, you're right. I bet this is why object.__hash__ was introduced in
the first place.
We're either back to square one, or we can add a __default_hash__ to
object which has the default hash implementation -- this isn't very
pretty but at least it works.
(I should add that this topic rose to my attention when I had to debug
the issue in some code of my own -- I had a class whose __eq__ was
overridden but whose __hash__ wasn't, and it was being used as a dict
key... It is indeed a pain to debug this. :-( )
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list