如果你所关心的只是检查抽象方法,那么是的。只需移动
abstract method set computation
到
__init_subclass__
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
# Compute set of abstract method names
abstracts = {name
for name, value in vars(cls).items()
if getattr(value, "__isabstractmethod__", False)}
for base in cls.__bases__:
for name in getattr(base, "__abstractmethods__", set()):
value = getattr(cls, name, None)
if getattr(value, "__isabstractmethod__", False):
abstracts.add(name)
cls.__abstractmethods__ = frozenset(abstracts)
基地
object.__new__
implementation
然后使用非空
__abstractmethods__
设置为防止实例化。
virtual subclass registration
; 这个
two hook methods this requires
有