Message377907
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. |
|
Date |
User |
Action |
Args |
2020-10-04 00:16:09 | rhettinger | set | recipients:
+ rhettinger, gvanrossum, eric.smith, python-dev, avrahami.ben |
2020-10-04 00:16:09 | rhettinger | set | messageid: <1601770569.08.0.547369017006.issue41905@roundup.psfhosted.org> |
2020-10-04 00:16:09 | rhettinger | link | issue41905 messages |
2020-10-04 00:16:08 | rhettinger | create | |
|