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 数组而不是字符串寻找相同的想法。
Enum
和StrEnum
的区别就在这一点上。如果你打印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
) 库的作者。
我正在寻找一种基于枚举的方法 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
我该如何解决?这种枚举的正确用法是什么?
我应该注意到,我发现
Enum
和StrEnum
的区别就在这一点上。如果你打印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
) 库的作者。