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 网络编程常用代码段
Aug 28 Python
Python 类的继承实例详解
Mar 25 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
python调用摄像头拍摄数据集
Jun 01 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 Python
python获取栅格点和面值的实现
Mar 10 Python
python中rc1什么意思
Jun 19 Python
Python字符串查找基本操作代码案例
Oct 27 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数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
PHP闭包实例解析
2014/09/08 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
基于JQuery的cookie插件
2010/04/07 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
python3实现跳一跳点击跳跃
2018/01/08 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
python Matplotlib模块的使用
2020/09/16 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
质检部职责
2013/12/28 职场文书
年终总结会主持词
2014/03/25 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
2015年科普工作总结
2015/07/23 职场文书
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技