Python的功能模块[2] -> abc -> 利用 abc 建立抽象基类

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 这是用来生成抽象基础类的元类。由它生成的类可以被直接继承。

相关阅读


1. 抽象方法
2. 装饰器

参考链接


http://blog.csdn.net/igorzhang/article/details/39026885