python中枚举的使用

枚举在应用中的重要性

最近在重构一部分别人的代码时候发现,很多应用中的常量都是写到了数据库中,然后在代码中获取对应的值来判断各种状态值以及属性,这就导致了在排查的问题时,需要不停地针对代码中的各种状态值,再去看下数据库具体代表了什么状态,影响排查的进度,也给后续的开发造成了困难

枚举

代表了一系列常量的集合

python中的枚举

python在3.4版本中加入了enum标准库

enum 提供了 Enum/IntEnum/unique 三个工具,可以通过继承 Enum/IntEnum 定义枚举类型,其中 IntEnum 限定枚举成员必须为(或可以转化为)整数类型,而 unique 方法可以作为修饰器限定枚举成员的值不可重复

1
2
3
4
5
6
7
8
9
10
11
12
from enum import Enum, IntEnum, unique

try:
@unique
class WEEKDAY(Enum):
MON = 1
TUS = 2
WEN = 3
THU = 4
FRI = 1
except ValueError as e:
print(e)

更为重要的是python中的枚举,所有的对象都是单例模式,无法实例,无法更改,只能将对象赋值给变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from enum import IntEnum


class UserSource(IntEnum):
DEL_USER = 4
DISABLED_USER = 3
NORMAL_USER = 2


if user_status == UserSource.DEL_USER: # 删除帐号
res = HandleSso.del_user(user_id, op_user_id)

elif user_status == UserSource.DISABLED_USER: # 禁用/未激活
status = 2
res = HandleSso.put_user_status(user_id, op_user_id, status)

elif user_status == UserSource.NORMAL_USER: # 正常用户
status = 1
res = HandleSso.put_user_status(user_id, op_user_id, status)
else:
return jsonify({"message": '参数错误'})

更多的学习

如果对python中的元类和单例有深入学习的想法,查看Enum的源码是最快的方式