面向对象-类的归一化设计
Python面向对象中的abc模块为我们提供了一种抽象类的归一化设计,把抽象类作为父类可以限制子类必须实现某些方法。
具体实现的方法如下:
1
|
import abc
|
抽象类Father在定义的时候指定其元类为abc.ABCMeta,里面的run方法用装饰器abc.abstractmethod装饰,这样所有继承它的子类就必须实现run这个方法。
上述代码中Son类继承了Father类但是没有实现其父类的run方法,在Son类实例化对象的时候会抛出下列异常:
1
|
TypeError: Can't instantiate abstract class Son with abstract methods run
|
我们在子类中必须实现run方法才能使程序正常运行:
1
|
import abc
|
异常处理的方式实现归一化效果
利用abc模块实现的归一化设计是在子类实例化的时候进行判断的,这种方式难免有些强制,我平时比较常用异常处理的方式:
1
|
class Father(object):
|
从上面的代码可以看出:在实例化son对象的时候不会发生异常,但是在son试图调用run方法的时候,根据对象的属性与方法的查找顺序的原理可知,由于Son类本身没有实现run方法,只能从父类中去找,而父类的run方法会直接抛出异常!同样也实现了强制子类必须定义run方法的效果。
浙公网安备 33010602011771号