1. 枚举模块的导入
python的枚举是一个特殊的数据类型,因为python中的枚举实际上就是一个特殊的类,并且它不是python内置的对象。
在使用枚举之前必须导入,导入方式如下:
# 导入枚举类
from enum import Enum
注意:枚举模块是在 enum 包里面
2. 自定义枚举
我们只需要继承 Enum 类即可自定义一个枚举类,具体代码如下:
from enum import Enum
# 通过继承Enum的方式自定义用户等级枚举
class VIP(Enum):
YELLOW = 1 #黄钻
GREEN = 2 # 绿钻
枚举是一个标签不能重复的(也就是定义枚举KEY不能重复),并且定义好之后的枚举 不能被外部程序修改 的类。这也是枚举与普通类的区别,如果我们去修改枚举值会直接报错,例如下方代码:
from enum import Enum
class VIP(Enum):
YELLOW = 1 # 黄钻
GREEN = 2 # 绿钻
VIP.YELLOW = 3
报错信息:can't set attribute,意思是不能修改属性
如果我们需要定义一个枚举值只能是整数时,我们可以导入 IntEnum 模块,自定义枚举时继承 IntEnum 模块。具体代码如下:
from enum import IntEnum
# 通过继承Enum的方式自定义用户等级枚举
class VIP(IntEnum):
YELLOW = 1 #黄钻
GREEN = 2 # 绿钻
继承 IntEnum 后,自定义的枚举YELLOW及GREEN的值只能是整数值,否则会直接报错。
上面我们已经说过,枚举是一个不重复标签的类,但是枚举的值是可以相同的。如果我们想要规定某个枚举的值不能重复,我们又该如何定义呢?python提供了一个装饰器 unique 来规定枚举的值不能相同,否则直接报错
from enum import Enum,unique
# 通过添加装饰器unique,规定枚举的值不能重复
@unique
class VIP(Enum):
YELLOW = 1 #黄钻
GREEN = 2 # 绿钻
BLACK = 2 #黑钻
报错信息:duplicate values found in : BLACK -> GREEN
3. 使用枚举
在我们自己的代码中我们只需要引入自定义的枚举,就可以像使用普通类一样使用枚举。例如下方代码:
# 导入自定义枚举
import VIP
# 获取自定义枚举的值
print(VIP.GREEN.value) # 打印结果:2
# 获取自定义枚举的标签
print(VIP.GREEN.name) # 打印结果:GREEN
除了像上面那样获取枚举值之外,我们还可以遍历枚举:
# 导入自定义枚举
import VIP
for v in VIP:
print(v.value) #打印的是枚举的值
注意:遍历时不能直接使用 v ,遍历的v是一个具体定义的枚举,例如:VIP.GREEN
也不要直接使用 VIP.GREEN,它获取的是具体定义的枚举,大家可以打印一下看看具体值
如何判断一个具体的值是否存在枚举中呢?对于这个问题,我们可以通过类型转换来判断这个值是否存在枚举中。如果变量a的值不在枚举中会直接报错,因此我们可以通过捕获异常的方式来判断某个值是否存在,具体捕获方式如下:
# 导入自定义枚举
import VIP
a = 4
try:
VIP(a)
print('值存在')
except Exception:
print('值不存在')
没有捕获时报错信息:4 is not a valid VIP
根据上面的特性,我们可以将判断的方法封装到枚举类中,我这里以静态方式封装:
from enum import Enum,unique
@unique
class VIP(Enum):
YELLOW = 1 # 黄钻
GREEN = 2 # 绿钻
WHITE = 3 # 黑钻
@staticmethod
def isExits(value):
try:
VIP(value)
return True
except:
return False
领取专属 10元无门槛券
私享最新 技术干货