浅谈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中用PIL库批量给图片加上序号的教程
May 06 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
Python中max函数用于二维列表的实例
Apr 03 Python
Python实现图片拼接的代码
Jul 02 Python
基于python历史天气采集的分析
Feb 14 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
基于pygame实现童年掌机打砖块游戏
Feb 25 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
python爬取天气数据的实例详解
Nov 20 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
能让Python提速超40倍的神器Cython详解
Jun 24 Python
Python torch.flatten()函数案例详解
Aug 30 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
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
php中通用的excel导出方法实例
2017/12/30 PHP
Javascript的构造函数和constructor属性
2010/01/09 Javascript
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
python中pass语句用法实例分析
2015/04/30 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
django使用html模板减少代码代码解析
2017/12/12 Python
python @property的用法及含义全面解析
2018/02/01 Python
Python 变量类型详解
2018/10/10 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python unichr函数知识点总结
2020/12/16 Python
股权收购意向书
2014/04/01 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
追悼会答谢词
2015/01/05 职场文书
商超业务员岗位职责
2015/02/13 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android