New submission from Max:

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

----------
assignee: docs@python
components: Documentation, Interpreter Core
messages: 291382
nosy: docs@python, max
priority: normal
severity: normal
status: open
title: Hashable doesn't check for __eq__

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30026>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to