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访问次数代码分享
Aug 06 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
python二分查找算法的递归实现方法
May 12 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
python学生管理系统代码实现
Apr 05 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
Python get获取页面cookie代码实例
Sep 12 Python
python分块读取大数据,避免内存不足的方法
Dec 10 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Python pip install之SSL异常处理操作
Sep 03 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
使用 MySQL Date/Time 类型
2008/03/26 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
Jquery常用技巧收集整理篇
2010/11/14 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
python定时执行指定函数的方法
2015/05/27 Python
Python 装饰器深入理解
2017/03/16 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
简单了解python单例模式的几种写法
2019/07/01 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python 实现多维数组(array)排序
2020/02/28 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
秋游活动策划方案
2014/02/16 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
贷款担保书范本
2015/09/22 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
python实现A*寻路算法
2021/06/13 Python
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS