枚举类Enum
枚举类,在企业开发中用的比较多
当我们需要定义常量时,一个办法是用大写的变量通过整数来定义,例如月份:
# 当项目中需要使用12个月份时
JAN = 1
FEB = 2
...
NOV = 11
DEC = 12
但是这样的定义的类型是 int
,并且仍然是变量,并且在运算中,无法时时创建对应的值,当然这种指代是以更好的方式去使用变量数值。
这里存在更好的方法是为这样的枚举类型定义一个class
类型,然后,每个常量都是class
的一个唯一实例。Python提供了 Enum
类来实现这个功能。
优化如下
# -*- coding: utf-8 -*-
# @author: Flyme awei
# @email : 1071505897@qq.com
# @Time : 2022/7/3 12:21
from enum import Enum
# 枚举中,一个名字对应一个值
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Otc', 'Nov', 'Dec'))
这样我们就获得了 Month
类型的枚举类,可以直接使用 Month.Jan
来引用一个常量,或者枚举它的所有成员通过for
循环进行取值,
Month.__members__
是Month的内置变量,可以打印成员标签,
如果在这个方法调用上.items()
函数所有成员都打印出来,数据类型为元组
for name, member in Month.__members__.items():
print(f'{name} => {member} , {member.value}')+
定义一个颜色常量枚举
# -*- coding: utf-8 -*-
# @author: Flyme awei
# @email : 1071505897@qq.com
# @Time : 2022/7/3 12:21
from enum import Enum
# 枚举中 一个一个名字对应一个值
Month = Enum('抬头-Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
print(Month.__members__) # 枚举中的值自动从1开始,不会重复
# 得到三月份的值
print(Month['Mar'].value) # 3
# 根据(2)来获得月份名字
print(Month(2).name) # Feb
# 定义一个颜色的常量枚举
class Color(Enum): # 第二种:自定义一个枚举类
red = 100
green = 200
blue = 300
yellow = 200 # 不允许key相同或者value,如果value重复,根据value取name只能取第一个
print(Color(200)) # Color.green
不允许key相同或者value相同,如果value重复,根据value取name只能取第一个
总结
1.枚举类不能用来实例化对象2.访问枚举类中的某一项,直接使用类名访问加上要访问的项即可,比如 color.RED
3.枚举类里面定义的 Key = Value,在类外部不能修改 Value 值
4.枚举项可以用来比较,使用 ==,或者 is
5.枚举类中的 Key 不能相同,Value 可以相同,但是 Value 相同的各项 Key 都会当做别名
6.枚举类可以用 for 进行遍历,members.items() 可以遍历出含有别名的类
7.如果要枚举类中的 key 也不能相同,需要导入 unique 对枚举类进行装饰