Alexey Izbyshev <izbys...@ispras.ru> added the comment: Regarding status quo (expanding the examples of @inada.naoki and @jab):
>>> import typing >>> import collections.abc as cabc >>> issubclass(typing.Mapping, cabc.Mapping) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/izbyshev/workspace/cpython/Lib/abc.py", line 143, in __subclasscheck__ return _abc_subclasscheck(cls, subclass) TypeError: issubclass() arg 1 must be a class >>> from abc import ABC >>> issubclass(typing.Mapping, ABC) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/izbyshev/workspace/cpython/Lib/abc.py", line 143, in __subclasscheck__ return _abc_subclasscheck(cls, subclass) File "/home/izbyshev/workspace/cpython/Lib/abc.py", line 143, in __subclasscheck__ return _abc_subclasscheck(cls, subclass) File "/home/izbyshev/workspace/cpython/Lib/contextlib.py", line 30, in __subclasshook__ return _collections_abc._check_methods(C, "__enter__", "__exit__") File "/home/izbyshev/workspace/cpython/Lib/_collections_abc.py", line 73, in _check_methods mro = C.__mro__ File "/home/izbyshev/workspace/cpython/Lib/typing.py", line 706, in __getattr__ raise AttributeError(attr) AttributeError: __mro__ >>> ABC.register(int) <class 'int'> >>> issubclass(typing.Mapping, ABC) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/izbyshev/workspace/cpython/Lib/abc.py", line 143, in __subclasscheck__ return _abc_subclasscheck(cls, subclass) TypeError: issubclass() arg 1 must be a class >>> typing.Mapping.__mro__ = () >>> issubclass(typing.Mapping, ABC) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/izbyshev/workspace/cpython/Lib/abc.py", line 143, in __subclasscheck__ return _abc_subclasscheck(cls, subclass) TypeError: issubclass() arg 1 must be a class >>> typing.Mapping.__bases__ = () >>> issubclass(typing.Mapping, ABC) False Can't say that I'm OK with it :) I'm for forbidding non-types in ABCMeta.__subclasscheck__, but if we are to add clean support for "class-likes" instead, I think that "class-like" objects should be clearly defined, for example, that they must have __mro__ and __bases__ (and probably support weakrefs unless we want to skip caching if they don't). ABCMeta.__subclasscheck__ is not standalone: it relies on issubclass() and __subclasshook__, and both of them have some expectations in practice. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue33018> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com