Message291382
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 |
|
Date |
User |
Action |
Args |
2017-04-09 16:23:03 | max | set | recipients:
+ max, docs@python |
2017-04-09 16:23:03 | max | set | messageid: <1491754983.55.0.46541300109.issue30026@psf.upfronthosting.co.za> |
2017-04-09 16:23:03 | max | link | issue30026 messages |
2017-04-09 16:23:03 | max | create | |
|