一、接口
接口是对象公开方法的一种集合,接口虽然实现过程和类相似,但却有不同的概念,差异如下:
类实现了对象的属性和方法,而接口指定了使用该接口需要实现的哪些方法类可以实例化,而接口不可以实例化类中的方法可以是实现,接口中的方法都是抽象方法二、抽象基类
抽象基类是必须包含抽象方法的类,它可以包含抽象方法,也可以包含普通方法。抽象基类的优点如下:
处理继承问题更加规范和系统明确调用之间的相互关系使用继承层次更加清晰限定子类实现的方法三、定义接口或抽象基类
Python标准库中有一个模块abc可以实现抽象基类和抽象方法,它们的实现方式如下:
抽象基类:通过继承abc模块中的ABC类来实现抽象基类。
抽象方法:通过装饰器的方法来调用abc模块中abstractmethod方法来注解抽象基类的方法。
abstractmethod注解除了可以实现抽象方法外,还可以注解类方法(@classmethod)、静态方法(@staticmethod)、属性(@property)。
from abc import ABCMeta, abstractmethodclass IStream(metaclass=ABCMeta): @abstractmethod def read(self, maxbytes=-1): pass @abstractmethod def write(self, data): pass抽象基类是不能直接被实例化
a = IStream() # TypeError: Can't instantiate abstract class # IStream with abstract methods read, write