Andrew Barnert added the comment:

Hashable and Awaitable already treat None (actually any falsey value) as not 
implementing the special method, and blocking any superclass implementation, in 
their __subclasshook__. (This only blocks implicit subclassing--anything that 
actually directly or indirectly inherits from or registers with Hashable is 
still Hashable even if it sets __hash__ = None.)

Coroutine, AsyncIterable, AsyncIterator, Iterable, Iterator, Generator, Sized, 
Container, and Callable treat None as an implementation.

http://bugs.python.org/file41440/cpython-iter-patch.diff for #25864 changes 
Iterable to work like Hashable, but doesn't touch any of the other types.

To fix this in general, just apply the same change to the other implicit ABCs 
(and probably factor out the logic instead of repeating it that many more 
times).

But I'm not sure a general fix is needed here. The special methods for those 
other types don't have a base class and/or fallback implementation to block the 
way __hash__, __iter__, and __reversed__ do (except for __call__ on 
metaclasses, but I can't imagine why you'd want a metaclass that isn't 
callable), so there's no need to set them to None to block that, so the problem 
should never come up.

----------

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

Reply via email to