__abstractmethods__是支持抽象基类的描述符;
它包装了默认情况下为空的 插槽
(因此描述符会引发属性错误)。最重要的是,它是CPython处理抽象方法的实现细节。
__
该属性用于跟踪抽象的方法,因此,如果实例未提供具体的实现,则可以阻止实例的创建:
>>> import abc>>> class FooABC(metaclass=abc.ABCmeta):... @abc.abstractmethod... def bar(self):... pass... >>> FooABC.__abstractmethods__frozenset({'bar'})>>> class Foo(FooABC): pass... >>> Foo()Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: Can't instantiate abstract class Foo with abstract methods bar该
abc.ABCmeta实现将设置
__abstractmethods__属性,并
type()使用它来检查应该已经实现但尚未实现的任何抽象方法。



