一、Python中的枚举
Python中的枚举是作为一个类存在的,这是与其他语言的一个较为鲜明的特征,总结它的用法特点如下:
1. Python枚举作为一个类存在,使用它需要首先导入枚举模块,然后继承并自定义需要的枚举类;
2. 导入枚举模块可以是Enum(枚举值可以是任意类型),也可以是IntEnum(枚举值只能是整型);
3. 枚举类不允许存在相同的标签;但是允许不同标签的枚举值相同,这样后者相当于前者别名;
4. 不同的枚举类型,即使枚举名和枚举值都一样,比较结果也是False
5. 枚举类的值不可以被外界更改
二、Python枚举的基本用法
定义一个枚举如下:
#第一步:导入枚举类
from enum import Enum
#第二步:通过继承的方式,定义一个适合我们使用的枚举类
#枚举的名字一般都大写
#继承Enum后枚举值可以是字符串也可以是整型,如果IntEnum则必须整型
class QQVIP(Enum):
RED = 1
GREEN = 2
BLUE = 3
BLUE_ALIAS= 3
OTHERCOLOR = "othercolor"
1.打印枚举信息
#1.1打印枚举类型,得到的是一个枚举类型
print(QQVIP.GREEN) #打印结果:QQVIP.GREEN
#1.2打印枚举名,得到的是一个字符串
print(QQVIP.GREEN.name) #打印结果:GREEN
print(QQVIP.OTHERCOLOR.name) #打印结果:OTHERCOLOR
#1.3.打印枚举值
print(QQVIP.GREEN.value) #打印结果:2
#1.4.测试枚举值不可更改,否则报错
#QQVIP.GREEN = 100
#1.5.通过枚举名称获取枚举
print(QQVIP['GREEN']) #打印:QQVIP.GREEN
print(QQVIP['OTHERCOLOR']) #打印:QQVIP.OTHERCOLOR
2.遍历枚举
#2.1.由于BLUE与BLUE_ALIAS枚举值相同,BLUE_ALIAS相当于BLUE的别名,所以没有被打印出来
forvalue inQQVIP:
print(value)
'''
打印结果:
QQVIP.RED
QQVIP.GREEN
QQVIP.BLUE
QQVIP.OTHERCOLOR
'''
#2.2.可以打印出所有的枚举值包括别名,使用__members__
forvalue inQQVIP.__members__:
print(value)
'''
打印结果:
RED
GREEN
BLUE
BLUE_ALIAS
OTHERCOLOR
'''
#2.3打印出枚举的所有信息,得到是元组
forvalue inQQVIP.__members__.items():
print(value)
'''
('RED', <QQVIP.RED: 1>)
('GREEN', <QQVIP.GREEN: 2>)
('BLUE', <QQVIP.BLUE: 3>)
('BLUE_ALIAS', <QQVIP.BLUE: 3>)
('OTHERCOLOR', <QQVIP.OTHERCOLOR: 'othercolor'>)
'''
3.枚举的比较
#3.1两个枚举值可以做等值比较
result1 = QQVIP.RED == QQVIP.GREEN
print(result1) #打印:False
result2 = QQVIP.RED == QQVIP.RED
print(result2) #打印:True
#3.2另一种比较
result2_1 = QQVIP.RED is QQVIP.RED
print(result2_1) #打印:True
#3.3两个枚举值不支持大小比较
#result3 = QQVIP.RED > QQVIP.GREEN
#print(result3) #打印:报错
#3.4:枚举值和对应值比较,并不相等
result4 = QQVIP.RED == 1
print(result4) #打印 False
4.枚举别名
不同标签但是枚举值相同,后者是前者别名
print(QQVIP.BLUE)
print(QQVIP.BLUE_ALIAS) #打印结果都是BLUE
5.枚举转换
通过具体值得到枚举类型
num = 2
print(QQVIP(num)) #打印:QQVIP.GREEN
三、枚举的特殊用法
创建一个枚举:枚举值只能是整型且不允许设置别名
from enum import IntEnum,unique
#枚举类的的特殊使用
@unique
class Grade(IntEnum):
Heigh = 1
#Heigh_Alias = 2 #报错重复值,设置unique后,不能设置别名
medium = 2
Low = 3
#Lower = "Lower" #报错,因为继承IntEnum,所以枚举值只能是Int
本文来自 梧雨北辰 的优快云 博客 ,全文地址请点击:
https://blog.youkuaiyun.com/dreamcoffeezs/article/details/80620987?utm_source=copy