涉及枚举的多重继承元类冲突

2024-04-26 00:04:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个双重继承的类,它是一个枚举,但也支持我自己的方法。 以下是上下文:

import abc
from enum import Enum

class MyFirstClass(abc.ABC):
    @abc.abstractmethod
    def func(self):
        pass

class MySecondClass(Enum, MyFirstClass):
    VALUE_1 = 0
    VALUE_2 = 1
    
    def func(self):
        return 42

MySecondClass的声明产生以下错误:

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

我尝试通过以下方式应用this stackoverflow solution

class MyMetaClass(type(Enum), type(MyFirstClass)):
    pass

class MyFinalClass(Enum, MyFirstClass, metaclass=MyMetaClass):
    VALUE_1 = 0
    VALUE_2 = 1
    
    def func(self):
        return 42 

但我得到了以下错误:

TypeError: new enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`

这是一个特定于Enum类型的问题,还是我遗漏了关于元类的其他内容


Tags: ofimportselfvaluedeftypeenumpass
1条回答
网友
1楼 · 发布于 2024-04-26 00:04:52

解决您眼前问题的方法是:

class MyFinalClass(MyFirstClass, Enum, metaclass=MyMetaClass):
    pass

请注意Enum是列出的最后一个常规类

对于功能完整的抽象枚举,您需要使用来自this answerABCEnumMeta,否则将无法正确标记缺少的抽象方法

相关问题 更多 >