Python中Enum与ABC多重继承出现元类冲突该如何解决?
解决方案
你合并元类的操作没有问题,第二个报错属于Enum的特有限制,仅需要调整父类的声明顺序即可解决。
报错原因
Python Enum存在固定的继承规则:定义枚举类时,所有非Enum类型的父类(包括Mixin类、自定义抽象基类、数据类型)必须放在Enum(及其子类)的前面,Enum必须处于父类列表的最后一位。你此前的代码将Enum放在父类首位,违反了该规则,因此触发报错。
可运行的完整代码
import abc from enum import Enum class MyFirstClass(abc.ABC): @abc.abstractmethod def func(self): pass # 混合元类定义逻辑正确,无需修改 class MyMetaClass(type(Enum), type(MyFirstClass)): pass # 调整父类顺序:自定义抽象基类在前,Enum在后 class MyFinalClass(MyFirstClass, Enum, metaclass=MyMetaClass): VALUE_1 = 0 VALUE_2 = 1 def func(self): return 42
功能验证
# 调用抽象方法正常返回 print(MyFinalClass.VALUE_1.func()) # 输出 42 # 类型校验正常 print(isinstance(MyFinalClass.VALUE_1, MyFirstClass)) # 输出 True print(isinstance(MyFinalClass.VALUE_1, Enum)) # 输出 True
内容的提问来源于stack exchange,提问作者Adam Boinet
相关产品推荐
相关产品推荐

