我想创建一个类,它有一个枚举作为属性。此枚举应具有字符串表示形式,在将使用枚举属性的类实例转储为 JSON 字符串时,该表示形式显示为人类可读的值。在下面的最小工作示例中,我以三种不同的方式创建了三个枚举。
反序列化后,每个属性都向我们表明它来自枚举,但带有字符串表示形式的枚举除外。它只是一个字符串。
如果不可能实现这样的结构,我想知道为什么。
如果你想测试它,你必须安装jsons并attrs使用
pip install attrs jsons
Run Code Online (Sandbox Code Playgroud)
在这里您可以看到一个最小的工作示例。
import jsons
import attr
from enum import Enum
# ----------------------------------------------------
# create enumeration with the help of a dictionary
fruits = {
"PINEAPPLE": "PINEAPPLE",
"APPLE": "APPLE",
"ORANGE": "ORANGE",
"BANANA": "BANANA",
}
Fruit = Enum("FRUITS", fruits)
# ----------------------------------------------------
# create a classical enumeration
class Nut(Enum):
PEANUT = 1
HAZELNUT = 2
CASHEW = 3
WALNUT = 4
# ----------------------------------------------------
# create enumeration with a …Run Code Online (Sandbox Code Playgroud) python enums serialization json-deserialization python-attrs
python 3.11中的enum包有StrEnum类。我认为它很方便,但不能在 python 3.10 中使用它。无论如何,使用此类的最简单方法是什么?
我正在寻找一种基于枚举的方法来返回每个枚举项后面的数组。例如,假设我需要为每种类型的目标指定一个范围,如下所示:
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”对象不可下标
我该如何解决?这种枚举的正确用法是什么?
我应该注意,我发现这篇文章返回一个字符串(而不是数组)。因此,我正在寻找返回数组而不是字符串的相同想法。