[Python-Dev] 'unhashable type' and new style classes

Thomas Heller theller@python.net
30 Dec 2002 18:21:37 +0100


Guido van Rossum <guido@python.org> writes:

> > This code
> > 
> >   class X:
> >       def __cmp__(self, other):
> >           return 1
> > 
> >   c1 = X()
> > 
> >   d = {}
> >   d[c1] = None
> > 
> > raises a TypeError, unhashable type, since the class does
> > not define a __hash__ method.
> > 
> > This error is no longer raised when X derives from object.
> > Bug (or feature)?
> 
> It's something in between. :-(
> 
> I've been struggling with this since 2.2 and not found a good
> solution.  Built-in mutable types like list and dict deal with this by
> having an explicit tp_hash slot that raises an exception.

Why doesn't the default implementation raise a TypeError (or be NULL),
and the immutable types override this?

> 
> Can you add a SF entry and assign it to me?  Any insight you might
> have in the matter would be appreciated.

Sure.

Thomas