Enum raises AttributeError: 'dict' object has no attribute '_member_names'

Enum raises AttributeError: 'dict' object has no attribute '_member_names'

我正在尝试使用 type(name, base, dict) 动态创建枚举 class。

from enum import Enum

class FriendlyEnum(Enum):
    def hello(self):
        print(self.name + ' says hello!')

正常方式工作正常:

class MyEnum(FriendlyEnum):
    foo = 1
    bar = 2

MyEnum.foo.hello()

# ->
foo says hello!

但如果我动态尝试:

MyEnum = type('MyEnum',
    (FriendlyEnum,),
    {'foo':1,'bar':2}
)

MyEnum.foo.hello()

# ->
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/enum.py", line 146, in __new__
enum_members = {k: classdict[k] for k in classdict._member_names}
AttributeError: 'dict' object has no attribute '_member_names'

有什么建议吗?

它可能对测试父枚举 class 的方法、动态创建具有不同属性和相同继承方法的新枚举 class 很有用。

Enum class can be called 动态创建新的 Enum 类型。这也适用于 Enum

的子classes
MyEnum = FriendlyEnum('MyEnum', {'foo': 1, 'bar': 2})
MyEnum.foo.hello()

为什么它不起作用的解释:EnumMeta 期望 class 字典(上面的 classdict)是 enum._EnumDict 的一个实例,但是你给的这是一个普通的字典(因此没有 _member_names 属性)。

不支持使用 type 直接创建 enum -- 请改用方法