在Python中,抽象基类(Abstract Base Classes,简称ABCs)是一种特殊的类,主要用于定义接口,即一组方法的规范,但不提供这些方法的实现。抽象基类不能被直接实例化,除非其所有抽象方法都被子类实现。Python的abc模块提供了对抽象基类的支持。
导入abc模块
首先,需要从collections.abc(对于容器类)或abc(对于其他类)模块中导入ABC(表示抽象基类)和abstractmethod(表示抽象方法)。
from abc import ABC, abstractmethod
定义抽象基类
可以通过继承ABC来定义一个抽象基类,并使用@abstractmethod装饰器来标记一个方法为抽象方法。
from abc import ABC, abstractmethod class AbstractShape(ABC): @abstractmethod def area(self): pass @abstractmethod def perimeter(self): pass
在这个例子中,AbstractShape是一个抽象基类,它定义了两个抽象方法:area和perimeter。这两个方法都没有具体的实现(只有pass语句)。
实现抽象基类
要创建一个有效的子类(即可以被实例化的子类),必须实现抽象基类中的所有抽象方法。
class Circle(AbstractShape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 def perimeter(self): return 2 * 3.14 * self.radius # 创建一个Circle对象
circle = Circle(5)
print(circle.area()) # 输出圆的面积
print(circle.perimeter()) # 输出圆的周长
在这个例子中,Circle类继承了AbstractShape抽象基类,并提供了area和perimeter方法的具体实现。因此,Circle类是一个有效的子类,可以被实例化。