涉及 Enum 的多重继承元类冲突

Ada*_*net 10 python inheritance enums metaclass

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

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

Run Code Online (Sandbox Code Playgroud)

的声明MySecondClass会产生以下错误:

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

我尝试通过执行以下操作来应用此 stackoverflow 解决方案

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

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

但我收到以下错误:

TypeError: new enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`
Run Code Online (Sandbox Code Playgroud)

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

Eth*_*man 6

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

class MyFinalClass(MyFirstClass, Enum, metaclass=MyMetaClass):
    pass
Run Code Online (Sandbox Code Playgroud)

请注意,这Enum是列出的最后一个常规课程。

对于功能齐全的抽象枚举,您需要使用此答案ABCEnumMeta中的- 否则将无法正确标记缺少的抽象方法。