This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author max
Recipients docs@python, max
Date 2017-04-09.16:23:03
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1491754983.55.0.46541300109.issue30026@psf.upfronthosting.co.za>
In-reply-to
Content
I think collections.abc.Hashable.__subclasshook__ should check __eq__ method in addition to __hash__ method. This helps detect classes that are unhashable due to:

to __eq__ = None

Of course, it still cannot detect:

def __eq__: return NotImplemented

but it's better than nothing.

In addition, it's probably worth documenting that explicitly inheriting from Hashable has (correct but unexpected) effect of *suppressing* hashability that was already present:

from collections.abc import Hashable
class X: pass
assert issubclass(X, Hashable)
x = X()

class X(Hashable): pass
assert issubclass(X, Hashable)
x = X() # Can't instantiate abstract class X with abstract methods
History
Date User Action Args
2017-04-09 16:23:03maxsetrecipients: + max, docs@python
2017-04-09 16:23:03maxsetmessageid: <1491754983.55.0.46541300109.issue30026@psf.upfronthosting.co.za>
2017-04-09 16:23:03maxlinkissue30026 messages
2017-04-09 16:23:03maxcreate