Raymond Hettinger <[email protected]> added the comment:
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):
@abstractmethod
def m(self):
pass
>>> class C(P):
pass
>>> C.m = lambda self: None
>>> C()
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
C()
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}")
cls.__abstractmethods__.remove(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.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue41905>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com