Python抽象类用于定义子类必须实现的接口规范,通过abc模块强制约束继承行为;它不可实例化,要求子类重写所有@abstractmethod方法,否则实例化时报TypeError,支持默认实现与复用,适用于框架扩展、插件系统等需保障基础能力的场景。
Python抽象类不是用来实例化的,而是定义子类必须实现的接口规范。它通过abc模块强制约束继承行为,确保不同实现遵循统一契约。
抽象类本身不能创建实例,它的价值在于声明“哪些方法必须被子类重写”。只要在类中定义了@abstractmethod装饰的方法,任何继承它的子类就必须提供具体实现,否则实例化时会报TypeError。
需要三步:导入ABC和abstractmethod,让类继承ABC,对关键方法加@abstractmethod装饰。
ABC(或使用metaclass=ABCMeta),仅加装饰器不够pass或...即可self等必需参数,签名需兼容抽象类强调“是什么”(is-a关系),要求显式继承和强制实现;协议类强调“能做什么”(结构匹配),支持鸭子类型,无需继承。
__len__、__iter__),且希望兼容第三方类 → 用Protocol
常见于插件系统、数据处理器、策略模式等需要多态但又必须保证基础能力的场景。
log()和close(),子类实现文件写入、网络发送等serialize()和deserialize()接口,JSON、XML、Protobuf各自实现