Olive wrote: > I am trying to define a class whose instances should not be hashable, > following: > http://docs.python.org/2/reference/datamodel.html#object.__hash__ > > class A: > def __init__(self,a): > self.value=a > __hash__=None > > > Then: > >>>> a=A(3) >>>> hash(a) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: 'NoneType' object is not callable >>>> hash([2]) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: unhashable type: 'list' > > I would expect the same error in both case and the error is confusing in > the first case. What's the proper way of making an object non hashable? > > Olive
Deriving your classes from object has several advantages, among them: >>> class A: ... __hash__ = None ... >>> hash(A()) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' object is not callable >>> class B(object): ... __hash__ = None ... >>> hash(B()) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'B' -- http://mail.python.org/mailman/listinfo/python-list