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
-- 请改用方法 。
我正在尝试使用 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
MyEnum = FriendlyEnum('MyEnum', {'foo': 1, 'bar': 2})
MyEnum.foo.hello()
为什么它不起作用的解释:EnumMeta
期望 class 字典(上面的 classdict
)是 enum._EnumDict
的一个实例,但是你给的这是一个普通的字典(因此没有 _member_names
属性)。
不支持使用 type
直接创建 enum
-- 请改用方法