Python深入浅出分析enum枚举类

 更新时间:2022年07月21日 09:20:56   作者:Flyme awei  
在python中枚举是一种类(Enum,IntEnum),存放在enum模块中。枚举类型可以给一组标签赋予一组特定的值,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

枚举类Enum

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

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

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

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

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

优化如下

# -*- coding: utf-8 -*-
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 -*-
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 对枚举类进行装饰

到此这篇关于Python深入浅出分析enum枚举类的文章就介绍到这了,更多相关Python枚举类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现矩阵转置的几种方法详解

    Python实现矩阵转置的几种方法详解

    这篇文章主要介绍了Python实现矩阵转置的几种方法详解,zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存,需要的朋友可以参考下
    2023-08-08
  • pytorch模型部署 pth转onnx的方法

    pytorch模型部署 pth转onnx的方法

    这篇文章主要介绍了pytorch模型部署 pth转onnx的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • python实现tree命令的使用示例

    python实现tree命令的使用示例

    本文主要介绍了python实现tree命令的使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • pandas中fillna()函数填充NaN和None的实现

    pandas中fillna()函数填充NaN和None的实现

    本文主要介绍了pandas中fillna()函数填充NaN和None的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • pycharm from lxml import etree标红问题及解决

    pycharm from lxml import etree标红问题及解决

    这篇文章主要介绍了pycharm from lxml import etree标红问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • python不同版本的_new_不同点总结

    python不同版本的_new_不同点总结

    在本篇内容里小编给大家整理了一篇关于python不同版本的_new_不同点总结内容,有兴趣的朋友们可以学习下。
    2020-12-12
  • Python Socket编程之多线程聊天室

    Python Socket编程之多线程聊天室

    这篇文章主要为大家详细介绍了Python Socket编程之多线程聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • python csv一些基本操作总结

    python csv一些基本操作总结

    今天给大家带来的是关于Python的相关知识,文章围绕着python csv的一些基本操作展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • pygame实现井字棋之第二步逻辑实现

    pygame实现井字棋之第二步逻辑实现

    这篇文章主要介绍了pygame实现井字棋之第二步逻辑实现,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • 如何查看Mac本机的Python3安装路径

    如何查看Mac本机的Python3安装路径

    这篇文章主要介绍了如何查看Mac本机的Python3安装路径问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论