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.

Author rhettinger
Recipients avrahami.ben, eric.smith, gvanrossum, python-dev, rhettinger
Date 2020-10-04.00:16:08
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <>
Guido, can the method update be made automatic?  When instantiation fails, recheck to see the missing abstract methods had been defined?

    >>> from abc import *
    >>> class P(ABC):
            def m(self):
    >>> class C(P):

    >>> C.m = lambda self: None
    >>> C()
    Traceback (most recent call last):
      File "<pyshell#11>", line 1, in <module>
    TypeError: Can't instantiate abstract class C with abstract method m

The latter message doesn't make sense that it should occur at all.

Roughly, the existing instantiation logic is:

     if cls.__abstractmethods__:
         raise TypeError(f"TypeError: Can't instantiate abstract class
                         {cls.__name} with abstract method {methname}")

Could that be changed to something like this:

     if cls.__abstractmethods__:
         for methname is cls.__abstractmethods__.copy():
             if getattr(cls, methname).__isabstractmethod__:
                 raise TypeError(f"TypeError: Can't instantiate abstract class
                                  {cls.__name} with abstract method {methname}")

I haven't thought this through.  Was just thinking that it would nice to have automatic updates rather than transferring the responsibility outside of the core ABC logic.
Date User Action Args
2020-10-04 00:16:09rhettingersetrecipients: + rhettinger, gvanrossum, eric.smith, python-dev, avrahami.ben
2020-10-04 00:16:09rhettingersetmessageid: <>
2020-10-04 00:16:09rhettingerlinkissue41905 messages
2020-10-04 00:16:08rhettingercreate