抽象基类(abstract base class, abc)就是类里定义了纯虚成员函数的类。纯虚函数只提供接口,并没有具体实现。抽象基类不能被实例化,通常是作为基类供子类继承,子类中重写虚函数,实现具体的接口
在C++中,派生类需要重写基类中的所有虚函数,不然是无法创建对象的,python怎样实现抽象基类呢?
class A(object):
def get(self, key):
pass
def set(self, key, value):
pass
class B(A):
pass
b = B()
b.get('abc')
上面的代码,派生类并未重写基类方法,创建对象,调用get方法,都不会报错,针对这一点,可以在基类中抛出异常,这样一来,如果调用未重写的基类函数,那么会报错,但是对象是可以创建的,这和C++基类中的虚函数还是不一样——基类虚函数未实现,派生类就无法创建对象
既然这样报错这个方法不可行,那就调用abc模块吧
import abc
class A(metaclass=abc.ABCMeta):
# 虚函数get
@abc.abstractmethod
def get(self, key):
pass
def set(self, key, value):
pass
class B(A):
def get(self, key):
pass
b = B()
这样一来,必须重写“虚函数”get才能创建对象
否则的话,无法创建对象