如何获取Python枚举类中含重复值的所有成员名称?
如何获取包含重复值的Python枚举类所有成员?
先看你的代码:
import enum class MyValues(enum.Enum): value1 = 1 value2 = 2 value3 = 1 print(MyValues._member_names_)
执行后输出是['value1', 'value2'],value3因为和value1值重复,被标准Enum当成了别名,所以不会出现在_member_names_里。
解决方法一:用aenum的NoAlias设置(正确用法)
你之前尝试aenum没生效,大概率是写法不对。正确的方式是在定义枚举类时,把settings=[NoAlias]作为参数传入:
from aenum import Enum, NoAlias class MyValues(Enum, settings=[NoAlias]): value1 = 1 value2 = 2 value3 = 1 # 遍历枚举类就能拿到所有成员 print([member.name for member in MyValues]) # 输出:['value1', 'value2', 'value3']
这种方式下,aenum会保留所有重复值的成员,不会把它们当作别名处理。
解决方法二:基于标准库Enum自定义实现
如果不想引入第三方库,可以通过自定义元类来记录所有定义的成员名称:
import enum class NoAliasEnumMeta(enum.EnumMeta): def __init__(cls, name, bases, attrs): # 提取类定义中所有非下划线开头、非Enum类型的成员名称 cls._all_member_names = [k for k in attrs if not k.startswith('_') and not isinstance(attrs[k], enum.Enum)] super().__init__(name, bases, attrs) class MyValues(enum.Enum, metaclass=NoAliasEnumMeta): value1 = 1 value2 = 2 value3 = 1 print(MyValues._all_member_names) # 输出:['value1', 'value2', 'value3']
这个元类会在枚举类初始化时,把所有定义的成员名称保存到_all_member_names属性里,不管值是否重复。
内容的提问来源于stack exchange,提问作者Blitz
相关产品推荐
相关产品推荐

