New submission from Talha Ahmed <talha.ah...@gmail.com>:
I have been experimenting a little with the `abc` module in python. A la >>> import abc In the normal case you expect your ABC class to not be instantiated if it contains an unimplemented `abstractmethod`. You know like as follows: >>> class MyClass(metaclass=abc.ABCMeta): ... @abc.abstractmethod ... def mymethod(self): ... return -1 ... >>> MyClass() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Can't instantiate abstract class MyClass with abstract methods mymethod OR for any derived Class. It all seems to work fine until you inherit from something ... say `dict` or `list` as in the following: >>> class YourClass(list, metaclass=abc.ABCMeta): ... @abc.abstractmethod ... def yourmethod(self): ... return -1 ... >>> YourClass() [] This is inconsistent because `type` is supposed to be the primary factory. >>> type(abc.ABCMeta) <class 'type'> >>> type(list) <class 'type'> Why is the check for `__abstractmethods__` only implemented for `object_new` and not for other built-in types? ---------- components: Interpreter Core messages: 350264 nosy: Talha Ahmed priority: normal severity: normal status: open title: No Instantiation Restrictions for AbstractBaseClasses derived from builtin types type: behavior versions: Python 2.7, Python 3.5, Python 3.6, Python 3.7, Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue37927> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com