笔记:
一:枚举类型的定义
二:枚举类和普通类的区别
1:值不可变
2:具有防止相同标签得功能,不同标签的值可以相同!
三:枚举类型、枚举值、枚举名称
1:VIP.YELLOW.Value 获得标签的值
2:VIP.BLACK.name 获取标签名称
3:枚举里面的部分为枚举类型!
四:枚举之间的比较
1: 支持等值比较和is, 不支持大小比较
2: 不同枚举类之间的比较
五:枚举的注意事项
不同标签的值相同的时候,第二种会被当做一种别名,调用时会被覆盖!
遍历的时候不会被打印出来,解决方法是:
for v in VIP.__members__.items():
print(v)
六:枚举转换
从数据库中去除某一个数值对应的值(a = 1),根据a的值匹配枚举的类型
a = 1
print(VIP(a))
七:其他
1:IntEnum类型说明:枚举的都是int类型的!
2:限制枚举类型的值不能一样
-------23种设计模式-------实践中学习--------
-------尝试写一些包和类库------------------
CODE:
1 # ----------------------------------------------#
2 # 定义一个枚举类型
3 # ----------------------------------------------#
4
5 from enum import Enum
6 from enum import IntEnum, unique
7
8
9 class VIP(Enum):
10 YELLOW = 1
11 GREEN = 2
12 BLACK = 3
13 RED = 4
14
15
16 class Common:
17 YELLOW = 2
18
19
20 # 注意这里显示的是VIP.Black而不是3,枚举的意义重在标签而不是标签的值
21 print(VIP.BLACK)
22
23
24 # ----------------------------------------------------#
25 # 枚举类和普通类的区别
26 # 字典和普通类封装数据: 1:可变 2:没有防止相同标签得功能
27 # ----------------------------------------------------#
28
29 # VIP.GREEN = 6 # 当改变值得时候报错
30
31 Common.YELLOW = 9 # 改变类变量的值
32 print(Common.YELLOW)
33 x = Common() # 类的实例化
34 print(x.YELLOW)
35
36 # ----------------------------------------------#
37 # 枚举类型、枚举值、枚举名称
38 # ----------------------------------------------#
39 print("Black = ", VIP.BLACK.value) # get value of Enum
40
41 print("name = ", VIP.BLACK.name) # get value of Name,the type of name is str
42
43 print(VIP.BLACK) # 名字为枚举类型
44
45 print(VIP['BLACK'])
46
47 # 枚举可以被遍历
48 for v in VIP:
49 print(v)
50
51
52 # ----------------------------------------------#
53 # 枚举之间的比较,支持等值比较,不支持大小比较
54 # ----------------------------------------------#
55
56 result1 = VIP.GREEN == VIP.BLACK
57 result2 = VIP.GREEN.value == 2 # 注意这里的结果
58 print(result1, result2)
59
60
61 class VIP1(Enum):
62 YELLOW = 1
63 GREEN = 2
64 BLACK = 3
65 RED = 4
66 WRITE = 5
67
68
69 result3 = VIP.GREEN == VIP1.GREEN
70 print(result3)
71
72 # ----------------------------------------------#
73 # 枚举注意事项
74 # ----------------------------------------------#
75
76
77 class VIP2(Enum):
78 YELLOW = 1
79 GREEN = 1 # 别名
80 BLACK = 3
81 RED = 4
82
83
84 for v in VIP2:
85 print(v)
86
87 for v in VIP2.__members__.items():
88 print(v)
89
90 for v in VIP2.__members__:
91 print(v)
92
93 # ----------------------------------------------#
94 # 枚举转换
95 # ----------------------------------------------#
96
97 a = 1
98 print(VIP(a)) # 可以看做是类型转换
99
100 # ----------------------------------------------#
101 # 枚举补充
102 # ----------------------------------------------#
103
104 # 1:IntEnum类型说明
105
106
107 class VIP3(Enum):
108 YELLOW = 1
109 GREEN = "str" # 别名
110 BLACK = 3
111 RED = 4
112
113
114 class VIP4(IntEnum):
115 YELLOW = 1
116 # GREEN = 'str' # 字符串报错
117 BLACK = 3
118 RED = 4
119
120
121 # 2:限制枚举类型的值不能一样
122 @unique
123 class VIP6(Enum):
124 YELLOW = 1
125 GREEN = 1 # 当值相同的时候会报错!
126 BLACK = 3
127 RED = 4