一、枚举
1.枚举类的特点
1. Python枚举作为一个类存在,使用它需要首先导入枚举模块,然后继承并自定义需要的枚举类;
2. 导入枚举模块可以是Enum(枚举值可以是任意类型),也可以是IntEnum(枚举值只能是整型);
3. 枚举类不允许存在相同的标签;但是允许不同标签的枚举值相同,这样后者相当于前者别名;
4. 不同的枚举类型,即使枚举名和枚举值都一样,比较结果也是False
2.定义枚举类
定义枚举类,需要在类的参数中,继承父类Enum
3.获取枚举类型、名字、值、遍历
from enum import Enum,IntEnum,unique
# 定义枚举类,需要在类的参数中,继承父类Enum
class VIP(Enum):
# 定义多个常量
YELLOW = 1
GREEN = 2
BLACk = 3
RED = 4
class Common():
YELLOW = 1
# 获取枚举类型
print(VIP.GREEN)
print(type(VIP['GREEN']))
# 获取枚举的名字
print(VIP.GREEN.name)
# 获取枚举的值
print(VIP.GREEN.value)
# 遍历枚举
for x in VIP:
print(x)
结果
VIP.GREEN
<enum 'VIP'>
GREEN
2
VIP.YELLOW
VIP.GREEN
VIP.BLACk
VIP.RED
4.与普通类相比
枚举类和普通类相比,普通类的变量是可变的,并且没有防止相同标签的功能
class Common():
YELLOW = 1
# 普通类变量,可变
Common.YELLOW = 2
print(Common.YELLOW)
结果
2
5.枚举类,注意事项
同一个枚举下,可以做is比较,以及相等比较,在不同枚举不可以比较
# 错误写法,不可以比较
# result = VIP.GREEN > VIP.BLACk
# 正确写法,可比较
result = VIP.GREEN == VIP.BLACk
print(result)
结果
False
同一个枚举下面,变量名不可以相同,变量值可以相同,# 值相同的情况下,YELLOW_ALIAS为YELLOW的别名
class VIP(Enum):
# 注:同一个枚举下面,变量名不可以相同,变量值可以相同,
# 值相同的情况下,YELLOW_ALIAS为YELLOW的别名
YELLOW = 1
YELLOW_ALIAS = 1
BLACk = 3
RED = 4
# 打印枚举中的3个变量,YELLOW_ALIAS不会被打印
for x in VIP:
print(x)
# 打印枚举中的4个变量,去掉items方法,只打印变量名
for y in VIP.__members__.items():
print(y)
# 将变量转换成枚举类
a = 3
print(VIP(a))
结果
VIP.YELLOW
VIP.BLACk
VIP.RED
('YELLOW', <VIP.YELLOW: 1>)
('YELLOW_ALIAS', <VIP.YELLOW: 1>)
('BLACk', <VIP.BLACk: 3>)
('RED', <VIP.RED: 4>)
VIP.BLACk
6.限制枚举类出现不同类型、不同值
# unique装饰器,限制变量出现相同值
@unique
# 继承IntEnum父类,限制变量出现不同类型
class VIP(IntEnum):
YELLOW = 1
YELLOW_ALIAS = 1
BLACk = 3
RED = 4
结果:执行报错,因为出现相同值