版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29027865/article/details/84335057
一、Python中的枚举
Python中的枚举是作为一个类存在的,通常枚举类用来存放的同一状态,同一维度下的变量。这是与其他语言的一个较为鲜明的特征,总结它的用法特点如下:
- Python枚举作为一个类存在,使用它需要首先导入枚举模块,然后继承并自定义需要的枚举类;
- 导入枚举模块可以是Enum(枚举值可以是任意类型),也可以是IntEnum(枚举值只能是整型);
- 枚举类不允许存在相同的标签;但是允许不同标签的枚举值相同,这样后者相当于前者别名;
- 不同的枚举类型,即使枚举名和枚举值都一样,比较结果也是False
- 枚举类的值不可以被外界更改
使用枚举类的情况:例如订单状态有1,2,3,但是你直接写到代码里order.status == 1这样别人看你的代码看不懂的,不如你创建一个枚举类,将1和订单未支付这两个关联上,如果是用dict的话方法每次都用get会比较麻烦,而且特性一少很多,并且dict里边value类型也不一定是理想的,很多不确定性吧
二、Python枚举的基本用法
定义一个枚举类型如下:
#第一步:导入枚举类
from enum import Enum
#第二步:通过继承的方式,定义一个适合我们使用的枚举类
#枚举的名字一般都大写
#继承Enum后枚举值可以是字符串也可以是整型,如果IntEnum则必须整型
class PeopleStatus(Enum):
Male = 0
Female = 1
mood = "good"
1. 打印枚举信息
#1.1打印枚举类型,得到的是一个枚举类型
print(PeopleStatus.Male) #打印结果:<PeopleStatus.Male: 0>
#1.2打印枚举名,得到的是一个字符串
print(PeopleStatus.Male.name) #打印结果:'Male'
print(PeopleStatus.mood.name) #打印结果:'mood'
#1.3.打印枚举值
print(PeopleStatus.mood.value) #打印结果:'good'
#1.4.测试枚举值不可更改,否则报错
#PeopleStatus.mood = 'nb'
#1.5.通过枚举名称获取枚举
PeopleStatus['mood'] 打印结果:<PeopleStatus.mood: 'good'>
2. 遍历枚举
#2.1.由于BLUE与BLUE_ALIAS枚举值相同,BLUE_ALIAS相当于BLUE的别名,所以没有被打印出来
for value in PeopleStatus:
print(value)
打印结果:
PeopleStatus.Male
PeopleStatus.Female
PeopleStatus.mood
#2.2.可以打印出所有的枚举值包括别名,使用__members__
for value in PeopleStatus.__members__:
print(value)
打印结果:
Male
Female
mood
#2.3打印出枚举的所有信息,得到是元组
for value in PeopleStatus.__members__.items():
print(value)
运行结果如下:
('Male', <PeopleStatus.Male: 0>)
('Female', <PeopleStatus.Female: 1>)
('mood', <PeopleStatus.mood: 'good'>)
3. 枚举的比较
#3.1两个枚举值可以做等值比较
result1 = PeopleStatus.Female == PeopleStatus.Male
print(result1) #打印false
result2 = PeopleStatus.mro == PeopleStatus.mood
print(result2) #打印false
#3.2另一种比较
result2_1 = PeopleStatus.mro is PeopleStatus.mood
print(result2_1) #打印:false
#3.3两个枚举值不支持大小比较
#result3 = PeopleStatus.Female > PeopleStatus.Male
#print(result3) #打印:报错
#3.4:枚举值和对应值比较,并不相等
result4 = PeopleStatus.Female == 1
print(result4) #打印 False
4. 枚举别名
不同标签但是枚举值相同,后者是前者别名
5. 枚举转换
通过具体值得到枚举类型
num = 1
print(PeopleStatus(num))
#输出:PeopleStatus.Female
三、枚举的特殊用法
创建一个枚举:枚举值只能是整型且不允许设置别名
from enum import IntEnum,unique
#枚举类的的特殊使用
@unique
class Grade(IntEnum):
Heigh = 1
#Heigh_Alias = 2 #报错重复值,设置unique后,不能设置别名
medium = 2
Low = 3
#Lower = "Lower" #报错,因为继承IntEnum,所以枚举值只能是Int