浅谈Python 的枚举 Enum


Posted in Python onJune 12, 2017

枚举是常用的功能,看看Python的枚举.

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

枚举的定义

首先,定义枚举要导入enum模块。
枚举定义用class关键字,继承Enum类。

注意:

定义枚举时,成员名称不允许重复 

默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名 

如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员

如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】

for name, member in Month.__members__.items():
  print(name, '=>', member, ',', member.value)

我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员.

访问这些枚举类型可以有若干种方法:

枚举支持迭代器,可以遍历枚举成员

>>> day1 = Weekday.Mon
>>> print(day1)
Weekday.Mon
>>> print(Weekday.Tue)
Weekday.Tue
>>> print(Weekday['Tue'])
Weekday.Tue
>>> print(Weekday.Tue.value)
>>> print(day1 == Weekday.Mon)
True
>>> print(day1 == Weekday.Tue)
False
>>> print(Weekday(1))
Weekday.Mon
>>> print(day1 == Weekday(1))
True
>>> Weekday(7)
Traceback (most recent call last):
 ...
ValueError: 7 is not a valid Weekday
>>> for name, member in Weekday.__members__.items():
...   print(name, '=>', member)
...
Sun => Weekday.Sun
Mon => Weekday.Mon
Tue => Weekday.Tue
Wed => Weekday.Wed
Thu => Weekday.Thu
Fri => Weekday.Fri
Sat => Weekday.Sat

枚举取值 总结:

通过成员的名称来获取成员;通过成员值来获取成员;通过成员,来获取它的名称和值.

注意: Enum 的成员均为单例(Singleton),并且不可实例化,不可更改.

枚举是可以比较的:

举成员可进行同一性比较,可进等值比较,不能进行大小比较.

总结:Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较,并且枚举有多钟实现方法。

以上这篇浅谈Python 的枚举 Enum就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python魔术方法详解
Feb 14 Python
几个提升Python运行效率的方法之间的对比
Apr 03 Python
Python中常见的数据类型小结
Aug 29 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
python字符串Intern机制详解
Jul 01 Python
python实现两个文件夹的同步
Aug 29 Python
Python笔记之facade模式
Nov 20 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
Django中的模型类设计及展示示例详解
May 29 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
sublime text 3配置使用python操作方法
Jun 11 #Python
python爬虫之百度API调用方法
Jun 11 #Python
python数据处理实战(必看篇)
Jun 11 #Python
requests和lxml实现爬虫的方法
Jun 11 #Python
Python实现自动登录百度空间的方法
Jun 10 #Python
Python实现获取命令行输出结果的方法
Jun 10 #Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 #Python
You might like
php伪静态之APACHE篇
2014/06/02 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
js实现放大镜特效
2017/05/18 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
跟老齐学Python之用while来循环
2014/10/02 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python requests模块实例用法
2019/02/11 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
全球性的在线商店:Vogca
2019/05/10 全球购物
常见的软件开发流程有哪些
2015/11/14 面试题
优秀村官事迹材料
2014/01/10 职场文书
放飞理想演讲稿
2014/09/09 职场文书