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实现简单聊天应用 python群聊和点对点均实现

    这篇文章主要为大家详细介绍了python实现简单聊天应用,python群聊和点对点均实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Python使用微信itchat接口实现查看自己微信的信息功能详解

    Python使用微信itchat接口实现查看自己微信的信息功能详解

    这篇文章主要介绍了Python使用微信itchat接口实现查看自己微信的信息功能,结合实例形式分析了Python微信itchat模块常见功能与操作技巧,需要的朋友可以参考下
    2019-08-08
  • 简单了解python数组的基本操作

    简单了解python数组的基本操作

    这篇文章主要介绍了简单了解python数组的基本操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python复制目录结构脚本代码分享

    Python复制目录结构脚本代码分享

    这篇文章主要介绍了Python复制目录结构脚本代码分享,本文分析了需求、讲解了匿名函数lambda等内容,并给出了脚本代码,需要的朋友可以参考下
    2015-03-03
  • python实现屏保计时器的示例代码

    python实现屏保计时器的示例代码

    这篇文章主要介绍了python实现屏保计时器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • python 数字转换为日期的三种实现方法

    python 数字转换为日期的三种实现方法

    在Python中,我们经常需要处理日期和时间,本文主要介绍了python 数字转换为日期的三种实现方法,包含datetime模块,strftime方法及pandas库,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • PyTorch一小时掌握之迁移学习篇

    PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python3.5 Json与pickle实现数据序列化与反序列化操作示例

    Python3.5 Json与pickle实现数据序列化与反序列化操作示例

    这篇文章主要介绍了Python3.5 Json与pickle实现数据序列化与反序列化操作,结合实例形式分析了Python3.5使用Json与pickle模块实现json格式数据的序列化及反序列化操作相关步骤与注意事项,需要的朋友可以参考下
    2019-04-04
  • 如何使用virtualenv管理python环境

    如何使用virtualenv管理python环境

    这篇文章主要介绍了如何使用virtualenv管理python环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • Django-Model数据库操作(增删改查、连表结构)详解

    Django-Model数据库操作(增删改查、连表结构)详解

    这篇文章主要介绍了Django-Model数据库操作(增删改查、连表结构)详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论