默认情况下,Python解析器不强制检查对抽象类的继承,即抽象类的子类可能没有实现其中的抽象方法,但是Python并不会报错。
为了避免这种情况,从Python 3.4/2.6开始,Python标准库中提供了abc模块(Abstract Base Classes),为定义Python的抽象基类提供了公共基础。
事实上,Python标准库中的numbers模块和collections模块都是abc模块的典型应用。
1. abc模块的组成
- class ABCMeta(type) #创建抽象基类的元类,abc模块的核心
def register(cls, MySubClass) #为MySubClass注册一个虚拟的子类名
def _dump_registry(cls, file=None)
def __instancecheck__(cls, instance)
def __subclasscheck__(cls, subclass)
- class ABC(metaclass=ABCMeta) #方便使用ABCMeta的辅助类,推荐使用