New submission from Talha Ahmed <[email protected]>:
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 <[email protected]>
<https://bugs.python.org/issue37927>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com