0
点赞
收藏
分享

微信扫一扫

九、Python高阶语法

一、枚举

1.枚举类的特点

1. Python枚举作为一个类存在,使用它需要首先导入枚举模块,然后继承并自定义需要的​​枚举类​​;

2. 导入枚举模块可以是​​Enum​​(枚举值可以是任意类型),也可以是IntEnum(枚举值只能是整型);

3. 枚举类不允许存在相同的标签;但是允许不同标签的枚举值相同,这样后者相当于前者别名;

4. 不同的枚举类型,即使枚举名和枚举值都一样,比较结果也是False


2.定义枚举类

定义枚举类,需要在类的参数中,继承父类Enum

九、Python高阶语法_枚举类型

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

结果:执行报错,因为出现相同值


举报

相关推荐

0 条评论