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列表操作使用示例分享
Feb 21 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
Python生成密码库功能示例
May 23 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
Python正则表达式和元字符详解
Nov 29 Python
详解python读取image
Apr 03 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
Django models filter筛选条件详解
Mar 16 Python
python 装饰器重要在哪
Feb 14 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
自己做矿石收音机
2021/03/02 无线电
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
PHP 面向对象详解
2012/09/13 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
JavaScript中的其他对象
2008/01/16 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
python获取标准北京时间的方法
2015/03/24 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
python实现抖音点赞功能
2019/04/07 Python
Flask-WTF表单的使用方法
2019/07/12 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
制定岗位职责的原则
2013/11/08 职场文书
助学贷款贫困证明
2014/09/23 职场文书
防灾减灾标语
2014/10/07 职场文书
比赛口号霸气押韵
2015/12/24 职场文书