This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: No Instantiation Restrictions for AbstractBaseClasses derived from builtin types
Type: behavior Stage:
Components: Interpreter Core Versions: Python 3.11, Python 3.10, Python 3.9
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: AlexWaygood, Talha Ahmed, iritkatriel, rhettinger, xtreak
Priority: normal Keywords:

Created on 2019-08-23 07:51 by Talha Ahmed, last changed 2022-04-11 14:59 by admin.

Messages (4)
msg350264 - (view) Author: Talha Ahmed (Talha Ahmed) Date: 2019-08-23 07:51
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?
msg350265 - (view) Author: Karthikeyan Singaravelan (xtreak) * (Python committer) Date: 2019-08-23 07:58
This looks like a duplicate of issue35362. I would prefer closing one of them to keep the discussion in one place. This looks like a variant of this issue : issue35063
msg407804 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021-12-06 13:42
Closed issue35362 as duplicate of this issue because there is a bit more info here.
msg407806 - (view) Author: Alex Waygood (AlexWaygood) * (Python triager) Date: 2021-12-06 13:55
See also #5996
History
Date User Action Args
2022-04-11 14:59:19adminsetgithub: 82108
2021-12-06 13:55:49AlexWaygoodsetnosy: + AlexWaygood
messages: + msg407806
2021-12-06 13:42:45iritkatriellinkissue35362 superseder
2021-12-06 13:42:33iritkatrielsetnosy: + iritkatriel

messages: + msg407804
versions: + Python 3.10, Python 3.11, - Python 2.7, Python 3.5, Python 3.6, Python 3.7, Python 3.8
2019-08-23 07:58:39xtreaksetnosy: + xtreak
messages: + msg350265
2019-08-23 07:53:59xtreaksetnosy: + rhettinger
2019-08-23 07:51:55Talha Ahmedcreate