代码之家  ›  专栏  ›  技术社区  ›  Em Ae

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

  •  1
  • Em Ae  · 技术社区  · 3 年前

    我有一个原型生成的代码,它有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,
    } 
    

    我想问的是,这是最好的蟒蛇方式吗?有什么更好的方法吗?

    2 回复  |  直到 3 年前
        1
  •  2
  •   larsks    3 年前

    为什么不在Enum中使用proto生成的值呢?

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

    如果你有:

    x = MyEnum.VALUE1
    

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

    x.value
    
        2
  •  1
  •   Itezaz    3 年前

    使用字典进行映射是非常常见且易于理解的实践。现在有另一种方法可以在不映射的情况下处理此问题。如果中的值 proto_type 是整数,下面的方式会更好。

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

    现在您可以按如下方式使用它。 MyEnum.VALUE1.value