ABC 抽象基类的使用
Python 中 abc.ABC 和 @abstractmethod 的用法是什么?如何定义抽象基类?
回答
Yahuda
抽象基类(ABC)定义接口规范,子类必须实现所有抽象方法,否则无法实例化。
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Circle(Shape):
def __init__(self, r):
self.r = r
def area(self):
return 3.14 * self.r ** 2
def perimeter(self):
return 2 * 3.14 * self.r
ABC 还可以使用 @abstractclassmethod、@abstractstaticmethod、@abstractproperty。
优点:强制接口一致性、支持 isinstance() 检查、注册虚拟子类。