python 中基于数组的枚举

Array-based enum in python

我正在寻找一种基于枚举的方法 return 每个枚举项后面的数组。例如,假设我需要为每种类型的目标指定一个范围,如下所示:

from enum import Enum 

class TargetRange(Enum):
    T1 = [0, 100]
    T2 = [30, 60]
    T3 = [50, 150]

现在,我正在使用如下枚举:

target_range = TargetRange.T1
value = 140

# ...
# adjust the value

if(value > target_range[1]):
    value = target_range[1]
elif(value < target_range[0]):
    value = target_range[0]
# ...

但是,我收到以下错误:

TypeError: 'TargetRange' object is not subscriptable

我该如何解决?这种枚举的正确用法是什么?

我应该注意到,我发现 到 return 是一个字符串(而不是数组)。因此,我正在为 returning 数组而不是字符串寻找相同的想法。

EnumStrEnum的区别就在这一点上。如果你打印TargetRange.T1,你会发现没有返回枚举项的值。因此,解决此问题的一个简单方法是重写您的第一行代码,如下所示:

target_range = TargtetRange.T1.value
#...

表示使用枚举项的.value 属性,而不是直接使用枚举项。

可通过三种方式获得索引支持:

  • 使用 .value 属性

    TargetRange.T1.value
    
  • 继承自list以及Enum:

    class TargetRange(list, Enum):
    
  • 添加__getitem__方法:

    class TargetRange(Enum):
        def __getitem__(self, index):
            return self._value_[index]
        T1 = [0, 100]
        T2 = [30, 60]
        T3 = [50, 150]
    
    

披露:我是 Python stdlib Enum, the enum34 backport, and the Advanced Enumeration (aenum) 库的作者。