Python学习:枚举类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29027865/article/details/84335057

一、Python中的枚举

Python中的枚举是作为一个类存在的,通常枚举类用来存放的同一状态,同一维度下的变量。这是与其他语言的一个较为鲜明的特征,总结它的用法特点如下:

  1. Python枚举作为一个类存在,使用它需要首先导入枚举模块,然后继承并自定义需要的枚举类;
  2. 导入枚举模块可以是Enum(枚举值可以是任意类型),也可以是IntEnum(枚举值只能是整型);
  3. 枚举类不允许存在相同的标签;但是允许不同标签的枚举值相同,这样后者相当于前者别名;
  4. 不同的枚举类型,即使枚举名和枚举值都一样,比较结果也是False
  5. 枚举类的值不可以被外界更改

使用枚举类的情况:例如订单状态有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

猜你喜欢

转载自blog.csdn.net/qq_29027865/article/details/84335057