Raymond Hettinger <raymond.hettin...@gmail.com> 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 <rep...@bugs.python.org> <https://bugs.python.org/issue41905> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com