python之枚举类Enum
本站寻求有缘人接手,详细了解请联系站长QQ1493399855
常量是任何一门语言中都会使用的一种变量类型
如 要表示星期常量,我们可能会直接定义一组变量
JAN = 1
TWO = 2
...
然后在返回给前端的时候,我们返回的就会是1,2,...这种魔法数字,导致后来的人阅读起来很麻烦。
在python中,为了代码的可读性和简洁性,更建议使用枚举类型
1、枚举类型的定义:
from enum import Enum
1)可以通过传入cls_name和一个可迭代对象来定义
传入list列表
week= Enum("Week", (["JAN", "TUE",... ]))
传入tuple元组
week = Enum("Week", ("JAN", "TUE"))
传入字典
week= Enum("Week", ({"JAN":"1", "TUE":"2"}))
传入string字符串
week= Enum("Week", "JAN TUE")
2)定义一个类,继承Enum
class Week(Enum):
JAN = 1
TUE = 2
2、枚举类型定义注意事项:
1)成员名称不能重复, 如果使用相同的key,会报错 Attempted to reuse key
2)不同成员的值允许相同,但是对于相同的值的成员,第二个成员名被看做第一个成员名的别名,在遍历的时候,只会遍历出其中一个成员
通过值回去枚举成员时,也只能获取一个
3)如果要限制枚举的值不能重复,可以使用装饰器@unique
使用了@unique装饰器,如果值出现重复,会报错:duplicate values
3、枚举取值
1)通过成员名称来取成员
week.TUE/ week["TUE"] --->
week.TUE.name---->TUE
week.TUE.value---->2
2)通过值来获取成员
Week(2) ------>
Week(2).name---->Tue
Week(2).value---->2
3)遍历取值
for week in Week:
print(week)
前面说了,如果Week中有值重复的成员,那么遍历的时候,只会遍历出一个成员,但是如果想要把所有的成员都遍历出来呢?需要用到__members__属性
for week in Week.__members__.items():
或者: for name, member in Week.__members__.items():print(name, '=>', member, ',', member.value)
4)enum枚举类型比较
枚举成员可进行同一性比较
week.JAN is week.TUE---->False
week.JAN is not week.JAN---->False
枚举成员可进行等值比较
week.JAN.value == "1"--->True
week.JAN==week.JAN