在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
类是一个有效的子类,可以被实例化。