首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python枚举的定义及使用

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OsROmj-Jif8CgBNhMP6Zte6g0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券