Python抽象基类和接口类的继承
Python中的抽象基类(Abstract Base Classes,简称ABC)和接口类(Interface Classes)都是用来规范类的行为的。它们定义了类应该实现的方法和属性,但是不提供具体的实现,需要子类来具体实现。
下面分别介绍抽象基类和接口类的继承。
抽象基类的继承
抽象基类是通过abc模块来定义的,它是一个特殊的类,不能直接实例化。子类必须实现抽象基类中定义的抽象方法,否则会抛出TypeError异常。
子类继承抽象基类时,可以使用@abstractmethod装饰器来声明一个抽象方法,也可以不用装饰器,直接在子类中实现。
示例代码如下:
import abc class BaseClass(metaclass=abc.ABCMeta): @abc.abstractmethod def method1(self): pass class SubClass(BaseClass): def method1(self): print("SubClass method1 implementation")
上面的代码中,BaseClass是一个抽象基类,其中定义了一个抽象方法method1。SubClass继承了BaseClass,并实现了method1方法。
在子类中必须实现抽象方法,否则会报错,示例代码如下:
class SubClass(BaseClass): pass # 报错:TypeError: Can't instantiate abstract class SubClass with abstract methods method1
接口类的继承
接口类是一个纯粹的抽象类,没有任何属性和方法的实现,它只定义了一个接口。子类必须实现接口中的所有方法,否则会抛出NotImplementedError异常。
Python中并没有提供官方的接口类,但是我们可以通过抽象基类来模拟接口类的行为。
示例代码如下:
class InterfaceClass(metaclass=abc.ABCMeta): @abc.abstractmethod def method1(self): pass @abc.abstractmethod def method2(self): pass class SubClass(InterfaceClass): def method1(self): print("SubClass method1 implementation") def method2(self): print("SubClass method2 implementation")
上面的代码中,InterfaceClass是一个接口类,其中定义了两个抽象方法method1和method2。SubClass继承了InterfaceClass,并实现了method1和method2方法。
在子类中必须实现所有接口方法,否则会报错,示例代码如下:
class SubClass(InterfaceClass): def method1(self): print("SubClass method1 implementation")
报错信息为:
TypeError: Can't instantiate abstract class SubClass with abstract methods method2
相关文章