Python学习 - 之ABC模块

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

猜你喜欢

转载自www.cnblogs.com/mingjie-c/p/10271302.html