> > I wonder if it would make sense to go further and merge *both* of these > features into regular classes. > > Checking for @abstractmethod in type.__new__ surely can't be that expensive, > can it? >
But it affects startup time. It iterate all of the namespace and tries `getattr(obj, `__isabstractmethod__`, False). It means massive AttributeErrors are raised and cleared while loading large library. OTOH, I have another idea: class AbstractFoo: def foo(self): ... __abstractmethods__ = ("foo",) In this idea, `type.__new__` can check only `__abstractmethods__`. > And if regular types supported 'register', then it would allow for a > potentially simpler and faster implementation. Right now, > superclass.register(subclass) has to work by mutating superclass, because > that's the special ABCMeta object, and this leads to complicated stuff with > weakrefs and all that. But if this kind of nominal inheritance was a basic > feature of 'type' itself, then it could work by doing something like > > subclass.__nominal_bases__ += (superclass,) > > and then precalculating the "nominal mro" just like it already precalculates > the mro, so issubclass/isinstance would remain fast. > I don't like it. In 99.9% of my classes, I don't need register based subclassing. > I guess enabling this across the board might cause problems for C classes > whose users currently use isinstance to get information about the internal > memory layout. > > -n _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/