Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #39222
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Subject | Re: Making unhashable object |
| Date | 2013-02-19 14:54 +0100 |
| Organization | None |
| References | <20130219143825.3077c3b8@pcolivier.chezmoi.net> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.2025.1361282083.2939.python-list@python.org> (permalink) |
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'
Back to comp.lang.python | Previous | Next — Previous in thread | Find similar | Unroll thread
Making unhashable object Olive <diolu.remove_this_part@bigfoot.com> - 2013-02-19 14:38 +0100 Re: Making unhashable object Chris Angelico <rosuav@gmail.com> - 2013-02-20 00:46 +1100 Re: Making unhashable object Peter Otten <__peter__@web.de> - 2013-02-19 14:54 +0100
csiph-web