python 中基于数组的枚举

OmG*_*OmG 3 python arrays enums python-3.x

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

from enum import Enum 

class TargetRange(Enum):
    T1 = [0, 100]
    T2 = [30, 60]
    T3 = [50, 150]
Run Code Online (Sandbox Code Playgroud)

现在,我使用如下所示的枚举:

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]
# ...

Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

类型错误:“TargetRange”对象不可下标

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

我应该注意,我发现这篇文章返回一个字符串(而不是数组)。因此,我正在寻找返回数组而不是字符串的相同想法。

Eth*_*man 8

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

还可以向 Python 枚举添加行为,这可以简化其他地方的代码。例如:

class TargetRange(Enum):
    T1 = [0, 100]
    T2 = [30, 60]
    T3 = [50, 150]
    #
    def __getitem__(self, index):
        return self._value_[index]
    #
    def limit(self, value):
        # adjust the value
        if(value > self[1]):
            value = self[1]
        elif(value < self[0]):
            value = self[0]
        return value
Run Code Online (Sandbox Code Playgroud)

然后在主代码中:

>>> TargetRange.T1.limit(140)
100
Run Code Online (Sandbox Code Playgroud)

声明:我是Python stdlibEnumenum34backportAdvanced Enumeration ( aenum)库的作者 。