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”对象不可下标
我该如何解决?这种枚举的正确用法是什么?
我应该注意,我发现这篇文章返回一个字符串(而不是数组)。因此,我正在寻找返回数组而不是字符串的相同想法。
可以通过三种方式获得索引支持:
使用.value属性
TargetRange.T1.value
Run Code Online (Sandbox Code Playgroud)
继承自list以及Enum:
class TargetRange(list, Enum):
Run Code Online (Sandbox Code Playgroud)
添加__getitem__方法:
class TargetRange(Enum):
def __getitem__(self, index):
return self._value_[index]
T1 = [0, 100]
T2 = [30, 60]
T3 = [50, 150]
Run Code Online (Sandbox Code Playgroud)
还可以向 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 stdlibEnum、enum34backport和Advanced Enumeration ( aenum)库的作者 。
| 归档时间: |
|
| 查看次数: |
3948 次 |
| 最近记录: |