枚举
枚举 python3.8 官网 (opens new window)
# 枚举用法
from enum import Enum, unique, auto
# 枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的、不可变的。在枚举中,可以对成员进行恒等比较,并且枚举本身是可迭代的。
# 因为枚举是被用来 代表常量 的所以我们建议枚举成员名称应使用 大写 形式,并将在我们的示例中使用此种风格。
# class enum.Enum , 此基类用于创建枚举常量。 请参阅 Functional API 小节了解另一种替代性的构建语法。
# class enum.IntEnum , 此基类用于创建属于 int 的子类的枚举常量。
# class enum.IntFlag , 此基类用于创建可使用按位运算符进行组合而不会丢失其 IntFlag 成员资格的枚举常量。 IntFlag 成员同样也是 int 的子类。
# class enum.Flag , 此基类用于创建枚举常量 可使用按位运算符进行组合而不会丢失其 Flag 成员资格的枚举常量。
# enum.unique() , 此 Enum 类装饰器可确保只将一个名称绑定到任意一个值。
# class enum.auto , 实例会被替换为一个可作为 Enum 成员的适当的值。 初始值从 1 开始。
# 成员值可以为任意类型: int, str 等等。 如果具体的值不重要,你可以使用 auto 实例,将为你选择适当的值。 但如果你混用 auto 与其他值则需要小心谨慎
@unique # 确保枚举值唯一
class Color(Enum):
RED = 1
BLACK = 2
BLUE = 3
print(Color.RED) # Color.RED
print(repr(Color.RED)) # <Color.RED: 1> , repr 包含更多信息
print(type(Color.RED)) # <enum 'Color'>
print(isinstance(Color.BLUE, Color)) # True
print(Color.RED.name) # RED
print(Color.RED.value) # 1
# 枚举支持按照定义顺序进行迭代
for c in Color:
print(c)
# 按插入类中顺序迭代
# Color.RED
# Color.BLACK
# Color.BLUE
# 枚举成员是可哈希的,因此它们可在字典和集合中可用
apples = dict()
apples[Color.RED] = 'red delicious'
print(apples) # {<Color.RED: 1>: 'red delicious'}
print({Color.RED: 'red delicious'} == apples) # True
print(Color(1)) # Color.RED
print(Color['RED']) # Color.RED
class Color1(Enum):
RED = auto()
BLUE = auto()
GREEN = auto()
print(list(Color1)) # [<Color1.RED: 1>, <Color1.BLUE: 2>, <Color1.GREEN: 3>]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
上次更新: 2023/09/04, 18:39:45