Python 使用具有重复值的枚举初始化变量

Python 使用具有重复值的枚举初始化变量,python,python-3.x,Python,Python 3.x,我有一个具有重复值的枚举类。示例中的每个值以位表示寄存器大小。我想用枚举名初始化变量。因为它们有相同的值,看起来Python第一次出现,忽略了我传递的枚举名 from enum import Enum class OperandType(Enum): EAX = 32 EBX = 32 ebx = 'EBX' new_op = OperandType[ebx] print(new_op) 将在此处打印的内容是: OperandType.EAX 如何让它像我期望的那样工

我有一个具有重复值的枚举类。示例中的每个值以位表示寄存器大小。我想用枚举名初始化变量。因为它们有相同的值,看起来Python第一次出现,忽略了我传递的枚举名

from enum import Enum
class OperandType(Enum):
    EAX = 32
    EBX = 32
   
ebx = 'EBX'
new_op = OperandType[ebx]
print(new_op)
将在此处打印的内容是:

OperandType.EAX
如何让它像我期望的那样工作?

根据:

枚举是绑定到唯一常量值的一组符号名(成员)

因此,指向相同值的名称将被视为彼此的别名。另见:

给定具有相同值的两个成员A和B(首先定义A),B是A的别名。按值查找A和B的值将返回A。按名称查找B也将返回A

在您的例子中,
EAX
是首先定义的,并且与
EBX
具有相同的值,因此查找
EBX
可以得到
EAX

至于如何使其按预期工作:不可能,因为枚举不是这样工作的

当然,您可以创建如下映射:

SIZES = {OperandType.EAX: 32, OperandType.EBX: 32}

…然后通过
size[operantype.EAX]

查询大小这也会起作用,因为类实例/枚举值是唯一的:

class OperandSize:
    def __init__(self, size):
    self._operand_size = size

class OperandType(Enum):
    EAX = OperandSize(32)
    AAA = OperandSize(32)

不使用枚举,只需使用ValuesRect的静态常量类。此行为在新函数中实现