原文链接:http://www.jb51.net/article/87710.htm
本文根据自己的理解和思考,对原文略有改动。。。
Python中我们可以使用abc模块来构建抽象类。在讲抽象类之前,先说下抽象方法的实现。
抽象方法是基类中定义的方法,但却没有任何实现。在python中实现一个抽象方法的简单的方法是:
class Sheep(object):
def __init__(self):
print '__init__ is called!'
def get_size(self):
raise NotImplementedError
s=Sheep()#生成一个实例。注意实例化时,并没有抛出错误
s.get_size()#只有调用该方法时才会抛出错误任何从Sheep继承下来的子类必须实现(重写)get_size方法,否则就会抛出一个错误。
但这种实现方法有个缺点:定义的子类只有调用那个方法时才会抛错。
这里有个简单方法可以在类被实例化时触发它:使用python提供的abc模块。
import abc
class Sheep(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def get_size(self):
return
class sheepson(Sheep):
def __init__(self):
print 'sheepson.__init__ is called!'
s1=Sheep() #报错,不能实例化抽象类
s2=sheepson()#报错,不能实例化抽象类这里实例化Sheep类或实例化任意从其继承的子类(未实现get_size)时候都会抛出异常。
因此,通过定义抽象类,可以定义子类的共同method(强制其实现)。
如何使用抽象类:
import abc
class A(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def load(self, input):
return
@abc.abstractmethod
def save(self, output, data):
return通过ABCMeta元类来创建一个抽象类, 使用abstractmethod装饰器来表明抽象方法
注册具体类:
import abc
class A(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def load(self, input):
return
@abc.abstractmethod
def save(self, output, data):
return
class B(object):
def load(self, input