abc.ABCMeta元类通过register注册虚拟子类。__subclasshook__自动判断子类关系。abstractmethod标记抽象方法。abstractproperty/abstractclassmethod/abstractstaticmethod在较新Python使用组合装饰器。__isabstractmethod__控制抽象性。register不检查方法实现只声明关系。__subclasshook__基于方法存在性自动判断。ABC与Protocol异同。鸭子类型利用__subclasshook__兼容。from abc import ABC, abstractmethodclass Stream(ABC):abstractmethoddef read(self): passabstractmethoddef write(self, data): passclassmethoddef __subclasshook__(cls, C):if cls is Stream:if (any(read in B.__dict__ for B in C.__mro__) andany(write in B.__dict__ for B in C.__mro__)):return Truereturn NotImplementedclass FileHandler:def read(self): return datadef write(self, data): print(fWrite: {data})print(issubclass(FileHandler, Stream)) # Trueprint(isinstance(FileHandler(), Stream)) # True