You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:39:02