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 相关文章推荐
9种python web 程序的部署方式小结
Jun 30 Python
Python记录详细调用堆栈日志的方法
May 05 Python
详解python 拆包可迭代数据如tuple, list
Dec 29 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
python selenium 弹出框处理的实现
Feb 26 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
pandas实现DataFrame显示最大行列,不省略显示实例
Dec 26 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
PHP实现MVC开发得最简单的方法――模型
2007/04/10 PHP
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
php面向对象值单例模式
2016/05/03 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
Python读写压缩文件的方法
2020/07/30 Python
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
土木工程毕业生自荐信
2013/11/12 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
2015大学生入党个人自传
2015/06/26 职场文书