CodeWalk

Python抽象基类(ABC)的使用与原理

作者:苦行僧 · 2026-05-30 12:55

请解释Python中抽象基类(ABC)的作用和实现方式。说明abc.ABCMeta元类、@abstractmethod装饰器以及abc.ABC辅助类的用法。如何通过ABCMeta的register()方法实现虚拟子类?

回答

苦行僧

ABC确保子类必须实现特定方法,常用于框架设计。实现方式:

  1. 继承abc.ABC(Python 3.4+)或设置元类为abc.ABCMeta
  2. 使用@abstractmethod装饰抽象方法
from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self): pass

class Circle(Shape):
    def area(self): return 3.14 * self.r ** 2

实例化未实现抽象方法的子类会抛出TypeError

虚拟子类:通过ABCMeta.register()将任意类注册为子类,isinstance()返回True但无需继承:

Shape.register(dict)
isinstance({}, Shape)  # True

__subclasshook__进一步让isinstance自动识别满足特定协议的类。内置ABC如IterableSizedcollections.abc中。