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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:15:44