Title: No Instantiation Restrictions for AbstractBaseClasses derived from builtin types
Type: behavior Stage:
Components: Interpreter Core Versions: Python 3.9, Python 3.8, Python 3.7, Python 3.6, Python 3.5, Python 2.7
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Talha Ahmed, rhettinger, xtreak
Priority: normal Keywords:

Created on 2019-08-23 07:51 by Talha Ahmed, last changed 2019-08-23 07:58 by xtreak.

Messages (2)
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
Date User Action Args
2019-08-23 07:58:39xtreaksetnosy: + xtreak
messages: + msg350265
2019-08-23 07:53:59xtreaksetnosy: + rhettinger
2019-08-23 07:51:55Talha Ahmedcreate