【发布时间】:2021-10-30 10:34:41
【问题描述】:
我需要一个 Enum 类的双重继承,但也支持我自己的方法。 这是上下文:
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 类型特有的问题,还是我遗漏了有关元类的其他内容?
【问题讨论】:
-
一般来说,元类不组成。我会重新考虑您是否真的需要
FirstClass作为抽象基类。 -
对于正确的抽象枚举类型,请使用来自this answer 的
ABCEnumMeta。
标签: python inheritance enums metaclass