abc模塊是AbsructBaseClass的縮寫
概念:
可以把抽象基類當作java里面的接口,在java里無法實現多繼承,但是可以實現多接口,
接口是不能用來實例化的,Python里面的抽象基類也是不能實例化的,python中變量只是一個符號,
可以指向任意一個類型的對象,從語言層面來講python就是一個可以多態的語言
# 抽象基類有啥用呢?
# 1 我們在某些情況下希望判定某個對象的類型
# 2 我們需要強制某個子類必須實現某些方法,例如:
hasattr 判斷某一個類是否有某種屬性
isinstance 判斷某一個類是否有
實際使用抽象基類的情況很少,更多的是使用多繼承的方式
#這樣實現一個抽象基類不會在初始化的時候檢查子類會不會實現它的方法
class CacheBase():
def get(self, key):
raise NotImplementedError
def set(self, kye, value):
raise NotImplementedError
class RedisCache(CacheBase): #如果不實現基類的方法的話在 ’運行時‘ 會默認拋出異常
pass
#可以import abc ’初始化時‘ 會拋出異常,強制子類來實現它的方法
import abc
class CacheBase(metaclass=abc.ABCMeta):
@abc.abstractmethod
def get(self, key):
raise NotImplementedError
@abc.abstractmethod
def set(self, kye, value):
raise NotImplementedError
class RedisCache(CacheBase): #如果不實現基類的方法的話 ’初始化時‘ 會默認拋出異常
pass