将枚举映射到 api 值的 Python 方式

问题描述 投票:0回答:2

我有一个原型生成的代码,它有 3 个值(我感兴趣的值)

proto_type.VALUE1
proto_type.VALUE2
proto_type.VALUE3

我在我的 python 项目中创建了一个枚举。

class MyEnum(Enum):
    VALUE1 = 0
    VALUE2 = 1
    VALUE3 = 2

我这样做的唯一原因是我可以限制被调用者使用特定值。现在我想将

MyEnum
映射到
proto_type
值。

我想创建一本字典,即,

Mapping = {
  MyEnum.Value1: imported_proto_type.VALUE1,
  MyEnum.Value2: imported_proto_type.VALUE2,
  MyEnum.Value3: imported_proto_type.VALUE3,
} 

我想问的是这样做的最佳 pythonic 方式吗?有没有更好的方法?

python python-3.x enums python-3.7
2个回答
1
投票

使用字典作图是很常见也很容易理解的做法。现在有另一种无需映射即可处理此问题的方法。如果

proto_type
中的值是整数,那么下面的方法会更好。

from enum import IntEnum

class MyEnum(IntEnum):
    VALUE1 = proto_type.VALUE1
    VALUE2 = proto_type.VALUE2
    VALUE3 = proto_type.VALUE3

现在您可以按如下方式使用它。

MyEnum.VALUE1.value


0
投票

为什么不直接在枚举中使用原型生成的值?

class MyEnum(Enum):
  VALUE1 = imported_proto_type.VALUE1
  VALUE2 = imported_proto_type.VALUE2
  VALUE3 = imported_proto_type.VALUE3

那么如果你有:

x = MyEnum.VALUE1

您可以通过以下方式直接获取原型值:

x.value
© www.soinside.com 2019 - 2024. All rights reserved.