> 文档中心 > 【Python面线对象进阶⑤】——枚举类enum

【Python面线对象进阶⑤】——枚举类enum

在这里插入图片描述

🐚 作者简介: 阿伟
💂 个人主页: Flyme awei

🐋 希望大家多多支持😘一起进步呀!

💬 如果文章对你有帮助、欢迎👉关注✨点赞👍收藏📂

目录

  • 枚举类Enum
  • 总结

枚举类Enum

枚举类,在企业开发中用的比较多

当我们需要定义常量时,一个办法是用大写的变量通过整数来定义,例如月份:

# 当项目中需要使用12个月份时JAN = 1FEB = 2...NOV = 11DEC = 12

但是这样的定义的类型是 int ,并且仍然是变量,并且在运算中,无法时时创建对应的值,当然这种指代是以更好的方式去使用变量数值。

这里存在更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了 Enum 类来实现这个功能。

优化如下

# -*- coding: utf-8 -*-# @author: Flyme awei # @email : 1071505897@qq.com# @Time  : 2022/7/3 12:21from 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}')+    

【Python面线对象进阶⑤】——枚举类enum

定义一个颜色常量枚举

# -*- coding: utf-8 -*-# @author: Flyme awei # @email : 1071505897@qq.com# @Time  : 2022/7/3 12:21from 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只能取第一个

【Python面线对象进阶⑤】——枚举类enum

总结

1.枚举类不能用来实例化对象

2.访问枚举类中的某一项,直接使用类名访问加上要访问的项即可,比如 color.RED

3.枚举类里面定义的 Key = Value,在类外部不能修改 Value 值

4.枚举项可以用来比较,使用 ==,或者 is

5.枚举类中的 Key 不能相同,Value 可以相同,但是 Value 相同的各项 Key 都会当做别名

6.枚举类可以用 for 进行遍历,members.items() 可以遍历出含有别名的类

7.如果要枚举类中的 key 也不能相同,需要导入 unique 对枚举类进行装饰