> > > 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? The default implementation of __hash__ must match the default implementation of __cmp__ (and rich comparisons, __eq__ etc.). So the default implementation cannot raise an exception, because objects are defined to be immutable by default. (Maybe this was a mistake, but it's not so easy to change without causing backwards incompatibilities.) > > Can you add a SF entry and assign it to me? Any insight you might > > have in the matter would be appreciated. > > Sure. Thanks. --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4