class MetaA(type):
passclass MetaB(type): passclass Base(metaclass=MetaA): passclass MyClass(Base, metaclass=MetaB): passmetaclass=...,那么就使用该元类上面两条是平等关系:
显式指定的元类与继承来的元类之间是兄弟关系,有问题,无法抉择;可以让显示指定的元类成为继承来的元类的子类,这样显示指定的元类优先级就高了
当你写:
class MyClass(Base, metaclass=MetaB): passBase 的元类是 MetaAMyClass 显式指定了元类 MetaB如果 MetaA 和 MetaB 是兄弟关系(即都直接继承自 type,彼此没有继承关系),那么 Python 就会困惑:
“我该用
MetaA还是MetaB来创建MyClass?它们互不兼容,没法合并!”
于是抛出错误:
TypeError: metaclass conflict...解决方案:让显式元类“兼容”继承来的元类 你提出的办法正是标准解法: 让显式指定的元类成为继承来的元类的子类 即:MetaB 继承自 MetaA Python
class MetaA(type): pass class MetaB(MetaA): # 👈 MetaB 是 MetaA 的子类 pass class Base(metaclass=MetaA): pass class MyClass(Base, metaclass=MetaB): # ✅ 合法! pass 此时: MyClass 的元类是 MetaB MetaB 兼容 Base 的元类 MetaA(因为它是其子类) Python 能顺利创建 MyClass,且 显式指定的 MetaB 生效,优先级更高