枚举(Enumeration)是一种数据类型,每个枚举值都是一个实例枚举的每个成员都有一个名称和一个相关联的数值。 具备相关特性: 可读性:在代码中使用明确命名的枚举值而不是字面常量,可以提高可读性。 维护性:枚举集中管理一系列相关的常量,方便修改和维护。 类型安全:相比于使用一组无关联的字面量(如整数或字符串),枚举作为一种自定义类型,能提供编译时的类型安全检查。 逻辑分组:枚举提供了一种逻辑上将相关常量分组的方式,如颜色、方向、状态、性质等。 防止非法值篡改:枚举值必须是预先定义的成员之一,这防止了非法值的赋值和使用。 #导入模块 from enum import Enum class vip(Enum): yello = 1 black = 2 red = 3 print(vip.yello) ## 以上 不是普通的类,如果普通的类,打印结果应该是1 ## 然而打印结果是vip.yello #(1) 用全局变量表示枚举 yello = 1 green = 1 #(2) 用字典表示枚举 {'yellow':1,'green':2} #(3) 一般类表示枚举class class typediamond(): yello = 1 green = 2 ##### 其实以上三种的不适合,以上后两种都是可变,就是说可以更改值;并且没有防止相同标签的功能 m = {'yellow':1,'green':2} m['yellow'] = 3 print(m) ## 这时值做了更改,同样普通的类也是可以轻易更改 """## 然而 m = {'yellow':1,'green':1} print(m) 与 class typediamond(): yello = 1 green = 1 不同标签对应相同的值,普通类和字典是可以的""" ## 枚举是不可以更改的,以下语句就报错 class vip(Enum): yello = 1 black = 2 red = 3 print(vip.yello) vip.yellow = 6 ## 枚举不能运用重复的标签,如下 class vip (Enum): yello = 1 yello = 2 red = 3 print(vip.yello) ##如何获取枚举标签对应的值 用.value class vip(Enum): yello = 1 black = 2 red = 3 print(vip.yello) #outcome :vip.yello print(vip.yello.value) # outcome :1 获取枚举标签对应的值 print(vip.yello.name) # 通过.nmae属性获取标签名称 outcome : yello print(type(vip.yello)) # <enum 'vip'> 这个是表示枚举下面的类型 print(type(vip.yello.name)) #<class 'str'> 这个是表示字符串 两则的区别 print(vip['yello'])# outcome: vip.green #枚举类型 #枚举的的名称 #枚举的值 ## 枚举是可以遍历的 class vip(Enum): yello = 1 black = 2 red = 3 for i in vip: print(i) ## outcome :vip.yello,vip.black ,vip.red ## 枚举之间可以做等值比较 但是不能够做大小比较,也可以做身份比较is操作符 class vip(Enum): yello = 1 black = 2 red = 3 """result = vip.yello > vip.black print(result) 大小比较报错 """ """result = vip.yello == vip.yello print(result) # 等值比较 outcome : True""" """result = vip.yello is vip.yello print(result)# 身份比较 outcome : True""" class vip(Enum): yello = 1 black = 1 # 这里不能够出现相同标签 比如两个yello ,但是标签的值是可以相同的 red = 3 print(vip.black) # outcome: vip.yello.可以理解成yello 是black 的别名,打印出别名 class vip (Enum): yello = 1 yello_as = 1 red = 3 for i in vip: """当标签对应的值是重复的,只会遍历其中一个另外一个标签会舍掉""" print(i) ### outcome : vip.yello vip.red ### 但是有时候又需要把这种重复的别名打印出来见下面俩个语句 class vip(Enum): yello = 1 yello_as = 1 red = 3 for i in vip.__members__.items(): print(i) class vip(Enum): yello = 1 yello_as = 1 red = 3 for i in vip.__members__: print(i) ## 枚举转换 查找枚举类型 class vip (Enum): yello = 1 black = 2 red = 3 A = 1 print(vip(A))# outcome :vip.yellome 枚举类型 """ ----------------------------""" ## #### 另外一个模块 IntEnum,与 Enum区别 from enum import IntEnum class vip(IntEnum): yello = 1 black = 'sd' red = 3 # 这个时候报错,InEnum,标签对应的值必须是整型 不能是字符串 print(vip.yello) from enum import IntEnum class vip(IntEnum): yello = 1 black = 2 red = 3 print(vip.yello)# 这个时候不报错,IntEnum,标签对应的值必须是整型 from enum import Enum class vip(Enum): yello = 1 black = 'sd' red = 3 print(vip.yello) ### unique 装饰器的用法,用装饰器 unique 就是提示你标签对应的值有重复 from enum import Enum,unique @unique class vip(Enum): yello = 1 black = 1 red = 3 ## outcome:ValueError: duplicate values found in <enum 'vip'>: black -> yello ## 就是说重复了两个值1 # 以下语句也是同理 from enum import IntEnum,unique @unique class vip(IntEnum): yello = 1 black = 1 red = 3 ### 枚举相对于其他普通类 是莫得实例化的 ,也是二者区别
Python高级编程枚举的用法
最新推荐文章于 2024-08-09 01:00:00 发布