python3 enum模块的应用实例详解


Posted in Python onAugust 12, 2019

一、枚举与字典类型

字典类型的缺点:

1.值可变
2.没有防止相同标签的功能

枚举的特点:
1.枚举类的值不可以被外界更改
2.不能存在相同的标签,但允许不同标签存在相同的枚举值,即后者相当于前者的别名
3.枚举值可以是任意类型
4.枚举标签尽量用大写

from enum import Enum #普通类
class dict():
  green = 1
  green = 2
  red = 3
dict.red = 4  
print(dict.red)
>>> 4
class VIP(Enum): 
  RED = 1
  GREEN =2
  YELLOW = 3
VIP.GREEN = 5 #枚举值不能动态更改
>>>File "D:\python\lib\enum.py", line 361, in __setattr__
raise AttributeError('Cannot reassign members.')

AttributeError: Cannot reassign members.
class VIP(Enum):
  RED = 1
  GREEN =2
  YELLOW = 3
  YELLOW = 3 #不能出现相同的标签
>>>File "D:\python\lib\enum.py", line 92, in __setitem__
    raise TypeError('Attempted to reuse key: %r' % key)
    TypeError: Attempted to reuse key: 'YELLOW'
class VIP(Enum):
  RED = 1
  GREEN =2
  YELLOW = 3
  BLUE = 3
print(VIP.BLUE)
>>>VIP.YELLOW  #即VIP.BLUE类似于VIP.YELLOW的别名
class VIP(Enum):
  RED = 1 #整型
  BLUE = 1.2 #浮点型
  GREEN = 'green' #str
  YELLOW = True #布尔值

二、枚举类型、枚举名称、枚举值

1.获取枚举类型中的标签:.name属性

2.获取枚举类型中的值:.value属性

from enum import Enum
class VIP(Enum):
  RED = 1
  GREEN = 'green'
  YELLOW = True
  BLUE = 1.2
print(VIP.RED) #枚举的类型
print(VIP.YELLOW.name)  #枚举的标签
print(VIP.YELLOW.value)  #枚举的数值
print('遍历成员。。。')
for i in VIP.__members__.items():  #枚举的遍历
  print(i)
>>>
VIP.RED
RED
1
遍历成员。。。
('RED', <VIP.RED: 1>)
('GREEN', <VIP.GREEN: 'green'>)
('YELLOW', <VIP.RED: 1>)
('BLUE', <VIP.BLUE: 1.2>)

三、枚举的比较运算

class VIP(Enum):
  RED = 1
  GREEN = 'green'
  YELLOW = True
  BLUE = 2
#枚举的比较
a = VIP.RED == VIP.RED #枚举值可以做等值比较
b = VIP.RED == VIP.GREEN
c = VIP.RED is VIP.RED
d = VIP.RED == 1 #枚举标签与枚举值比较,并不相等
f = VIP.RED < VIP.BLUE #枚举值不支持大小比较,打印会报错TypeError: '<' not supported between instances of 'VIP' and 'VIP'
print(a)
print(b)
print(c)
print(d)
>>>
True
False
True
False

四、枚举的转换

class VIP(Enum):
  RED = 1
  GREEN = 'green'
  YELLOW = True
  BLUE = 2
print(VIP(2))  #通过具体值获取枚举类型,返回VIP.BLUE
print(VIP('green'))  #返回VIP.GREEN

五、枚举的拓展unique

unique:规定两个不同的枚举不能取相同的值

from enum import Enum,unique
@unique
class VIP(Enum):
  RED = 1
  GREEN = 1
  YELLOW = True
  BLUE = 2
>>>报错
ValueError: duplicate values found in <enum 'VIP'>: GREEN -> RED, YELLOW -> RED

六、枚举的拓展auto

如果我们对枚举值没有特别的要求或者没有太大的影响时,我们可以使用auto自动生成对应的数值

from enum import Enum,auto
class VIP(Enum):
  RED = auto()
  GREEN = auto()
  YELLOW = auto()
  BLUE = auto()
for i in VIP.__members__.items():  #遍历枚举
  print(i)
>>>
('RED', <VIP.RED: 1>)
('GREEN', <VIP.GREEN: 2>)
('YELLOW', <VIP.YELLOW: 3>)
('BLUE', <VIP.BLUE: 4>)

其实,auto值是调用_generate_next_value_()函数来产生的,我们可以通过重写该函数

from enum import Enum,auto
class auto_test(Enum):
  def _generate_next_value_(name, start, count, last_values):
    return name
class VIP(auto_test):
  RED = auto()
  GREEN = auto()
  YELLOW = auto()
  BLUE = auto()
# for i in VIP.__members__.items(): #遍历枚举
#   print(i)
print(list(VIP))  #转换列表
>>>
[<VIP.RED: 'RED'>, <VIP.GREEN: 'GREEN'>, <VIP.YELLOW: 'YELLOW'>, <VIP.BLUE: 'BLUE'>]

总结

以上所述是小编给大家介绍的python3 enum模块的应用实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python ip正则式
May 07 Python
Python 随机生成中文验证码的实例代码
Mar 20 Python
python复制文件代码实现
Dec 23 Python
Python作用域用法实例详解
Mar 15 Python
python中PIL安装简单教程
Apr 21 Python
python正则中最短匹配实现代码
Jan 16 Python
对python for 文件指定行读写操作详解
Dec 29 Python
调整Jupyter notebook的启动目录操作
Apr 10 Python
python模拟实现分发扑克牌
Apr 22 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
python exit出错原因整理
Aug 31 Python
Python进程池与进程锁之语法学习
Apr 11 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 #Python
django+echart数据动态显示的例子
Aug 12 #Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 #Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 #Python
python内存管理机制原理详解
Aug 12 #Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 #Python
python实现图片压缩代码实例
Aug 12 #Python
You might like
PHP+ajax 无刷新删除数据
2010/02/20 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
python检测服务器是否正常
2014/02/16 Python
python求素数示例分享
2014/02/16 Python
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
详解Swift中属性的声明与作用
2016/06/30 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
Python列表list操作相关知识小结
2020/01/29 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Python实现上下文管理器的方法
2020/08/07 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
ASP.NET中的身份验证有那些
2012/07/13 面试题
驾驶员岗位职责
2014/01/29 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
个人廉政承诺书
2015/04/28 职场文书
工作年限证明范本
2015/06/15 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
nginx日志格式分析和修改
2022/04/28 Servers