abc模块 / abc Module
在定义抽象方法时,为了在初始化阶段就检测是否对抽象方法进行了重定义,Python 提供了 abc 模块。
1 from abc import ABCMeta, abstractmethod 2 3 # Generate a abstract base obj - MyABC 4 class MyABC(metaclass=ABCMeta): 5 #__metaclass__ = ABCMeta 6 @abstractmethod 7 def run(self): 8 pass 9 10 class Foo(MyABC): 11 def run(self): 12 print('run') 13 14 f = Foo() 15 f.run()
第 4 行:生成一个抽象的基类 MyABC,这其中利用了 metaclass 元类的相关用法
第 6-7 行:抽象方法及装饰器,抽象方法可以不执行任何程序,但是子类中必须重定义这个函数
第 10 行:定义 MyABC 的子类 Foo,此时若 Foo 中没有定义 run 方法,则在运行前便会产生报错,而不是等到运行后才报错
Note: abc.ABCMeta 这是用来生成抽象基础类的元类。由它生成的类可以被直接继承。