枚举引发 AttributeError:“dict”对象没有属性“_member_names”

val*_*app 6 python enums

我正在尝试使用 type(name, base, dict) 动态创建一个 Enum 类。

from enum import Enum

class FriendlyEnum(Enum):
    def hello(self):
        print(self.name + ' says hello!')
Run Code Online (Sandbox Code Playgroud)

正常的方法工作得很好:

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

MyEnum.foo.hello()

# ->
foo says hello!
Run Code Online (Sandbox Code Playgroud)

但如果我动态尝试:

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'
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

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

Iai*_*ton 8

可以调用该类来Enum动态创建新类型。这也适用于EnumEnum

MyEnum = FriendlyEnum('MyEnum', {'foo': 1, 'bar': 2})
MyEnum.foo.hello()
Run Code Online (Sandbox Code Playgroud)