使用type动态创建Enum子类报'dict'无'_member_names'属性如何解决
问题原因
Enum类的创建逻辑由专属元类EnumMeta实现,默认type无法生成Enum初始化要求的_member_names等专属属性,传入普通字典时会触发AttributeError异常。
可行解决方案
方案1:使用Enum自带的函数式创建API(最推荐)
直接调用自定义的父Enum类即可动态生成子类,语法简洁,不需要触碰底层元类逻辑:
# 第二个参数传入成员字典,可灵活替换为不同的成员配置 MyEnum = FriendlyEnum('MyEnum', {'foo': 1, 'bar': 2}) MyEnum.foo.hello() # 输出:foo says hello!
如果需要批量生成不同成员的枚举类做测试,只需要循环传入不同的成员字典即可,完全适配测试父Enum类方法的需求。
方案2:使用Enum专属元类创建
如果需要更细粒度控制类创建过程,可以使用EnumMeta配合_EnumDict实现:
from enum import EnumMeta, _EnumDict # 使用Enum专属的字典类存储成员,会自动生成_required的_member_names等属性 member_dict = _EnumDict() member_dict['foo'] = 1 member_dict['bar'] = 2 # 用EnumMeta而非默认type创建类 MyEnum = EnumMeta('MyEnum', (FriendlyEnum,), member_dict) MyEnum.foo.hello() # 输出:foo says hello!
内容的提问来源于stack exchange,提问作者valcapp
相关产品推荐
相关产品推荐

