Python3(八) 枚举详解
一.枚举其实是一个类
建议标识名字用大写
1.枚举类:
- from enum import Enum
- class VIP(Enum):
- YELLOW = 1
- GREEN = 2
- BLACK = 3
- RED = 4
- print(VIP.YELLOW)
- #VIP.YELLOW #关注的是它的标签不是数字
2 枚举和普通类相比的优势
三种其他的普通方法表示枚举:
- (1)
- yellow = 1
- green = 2
- (2)字典的表示方式
- {'yellow':1,'green':2}
- (3)类的表示方式
- class TypeDiamond():
- yellow = 1
- green = 2
这些方式,它们都是可变的,可以在代码中轻易的更改值,且没有防止相同标签的功能。
3.枚举的特点:
- from enum import Enum
- class VIP(Enum):
- YELLOW = 1
- #YELLOW= 2 #不可重复,报错
- BLACK = 3
- RED = 4
- print(VIP.YELLOW)
- #VIP.YELLOW = 6 #不可更改,报错
二.枚举类型、枚举名称与枚举值
1.获取枚举类型下某一数值:
- from enum import Enum
- class VIP(Enum):
- YELLOW = 1
- GREEN = 2
- BLACK = 3
- RED = 4
- print(VIP.YELLOW.value)
- print(VIP.YELLOW.name)
- print(VIP.YELLOW)
- print(VIP['YELLOW'])
- #1 #枚举值
- #YELLOW #<class 'str'> 获取标签名
- #VIP.YELLOW #<enum 'VIP'> 枚举类型
- #VIP.YELLOW
2.枚举是可以遍历的:
- from enum import Enum
- class VIP(Enum):
- YELLOW = 1
- GREEN = 2
- BLACK = 3
- RED = 4
- for v in VIP :
- print(v)
- #VIP.YELLOW
- VIP.GREEN
- VIP.BLACK
- VIP.RED
三. 枚举的比较运算
1.两个枚举之间可以使用等值比较(==),枚举与数值比较的判断结果不对。两个枚举之间不能进行大小比较。
2.支持is操作:
- result = VIP.GREEN is VIP.GREEN
- #True
3.两个大类之间也可以进行等值比较,不过结果是False:
- from enum import Enum
- class VIP(Enum):
- YELLOW = 1
- GREEN = 2
- BLACK = 3
- RED = 4
- class VIP1(Enum):
- YELLOW = 1
- GREEN = 2
- BLACK = 3
- RED = 4
- print(VIP.GREEN ==VIP1.GREEN)
- #False
四.枚举注意事项
1.枚举的数值可以相同,在这种情况下,将第二种枚举类型看成别名。遍历时不会打印别名:
- class VIP(Enum):
- YELLOW = 1
- GREEN = 1 #别名,不会报错
- BLACK = 3
- RED = 4
- print(VIP.GREEN)
- #VIP.YELLOW
2.把别名加入遍历循环:
- (1)
- for v in VIP.__members__.items() :
- print(v)
- #('YELLOW', <VIP.YELLOW: 1>)
- #('GREEN', <VIP.GREEN: 1>)
- #('BLACK', <VIP.BLACK: 3>)
- #('RED', <VIP.RED: 4>)
- (2)
- 或者遍历__members__:
- for v in VIP.__members__:
- print(v)
- #YELLOW
- #GREEN
- #BLACK
- #RED
五.枚举转换
1.在数据库里一般存储数值或者标签名字来代表枚举类型,推荐存储数值,数字占用的空间更小。但是不建议在代码种用数值代表枚举,可读性不强。
2.如何将数字转换成枚举类型:
- from enum import Enum
- a = 1
- class VIP(Enum):
- YELLOW = 1
- GREEN = 2
- BLACK = 3
- RED = 4
- print(VIP(a)) #转换枚举类型
- #VIP.YELLOW
六.枚举小结
1.要求每个枚举类型都是数字的时候继承IntEnum:
- from enum import IntEnum
- class VIP(IntEnum):
- YELLOW = 1
- GREEN = 2
- BLACK = 3
- RED = 4
2.限制不同的枚举类型不能取相同的值:
- from enum import Enum
- from enum import IntEnum,unique
- @unique #装饰器
- class VIP(IntEnum):
- YELLOW = 1
- GREEN = 2
- BLACK = 3
- RED = 4
枚举类型不能实例化,属于单例模式
Python3(八) 枚举详解的更多相关文章
- Mac OS X10.9安装的Python2.7升级Python3.4步骤详解
Mac OS X10.9安装的Python2.7升级Python3.4步骤详解 Mac OS X10.9默认带了Python2.7,不过现在Python3.4.0出来了,如果想使用最新版本,赶紧升级下 ...
- python3 常用模块详解
这里是python3的一些常用模块的用法详解,大家可以在这里找到它们. Python3 循环语句 python中模块sys与os的一些常用方法 Python3字符串 详解 Python3之时间模块详述 ...
- Linux学习-linux系统下python升级到python3.6步骤详解,以及遇到的问题解决
说明:一般linux会自带pyhton2.7 1.首先下载源tar包 可利用linux自带下载工具wget下载,如下所示: wget http://www.python.org/ftp/python/ ...
- 枚举详解之EnumSet、EnumMap用法
枚举简单例子 /** * @author shuliangzhao * @Title: Color * @ProjectName design-parent * @Description: TODO ...
- python3多线程趣味详解
python3的多线程很多人无法理解是怎么运行的,因此本文从程序猿的日常生活出发,写了一个由浅入深的多线程教程,这样子大家就不会觉得陌生了,多线程真的很简单很简单! 不要讲多线程局限于库或者框架,自己 ...
- C# 控件双缓冲控制 ControlStyles 枚举详解
ControlStyles 枚举 .NET Framework 4 指定控件的样式和行为. 此枚举有一个 FlagsAttribute 特性,通过该特性可使其成员值按位组合. 命名空间: Sy ...
- Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Mac OS X10.9默认带了Python2.7,不过现在Python3.3.3出来了,如果想使用最新版本,赶紧升级下吧.基本步骤如下 第1步:官网下载Python3.3 这里面有windows和m ...
- Java 枚举详解
为什么要用枚举 在博客系统中,一篇文章有且可能有这几种状态, 数据库中article文章表中state字段存储数值,表示其状态: 0(已发表Published) 1(草稿Draft) 2(撤回撤回(D ...
- Java基础——枚举详解
前言: 在第一次学习面向对象编程时,我记得最深的一句话就是“万物皆对象”.于是我一直秉承着这个思想努力的学习着JAVA,直到学习到枚举(Enum)时,看着它颇为奇怪的语法……我一直在想,这TM是个什么 ...
随机推荐
- 继承Exception⭐⭐
public class ECOrderException : Exception { //第一种类型: throw new ECOrderException { ErrorCode = " ...
- eclipse反编译插件 jadclipse jad
eclipse常用反编译插件jadclipse.jad 1.下载jadclipse:net.sf.jadclipse_3.3.0.jar,放到eclipse-plugins 2.下载jad.exe,放 ...
- crawler碎碎念4 关于python requests、Beautiful Soup库、SQLlite的基本操作
Requests import requests from PIL import Image from io improt BytesTO import jason url = "..... ...
- (分块暴力)Time to Raid Cowavans CodeForces - 103D
题意 给你一段长度为n(1 ≤ n ≤ 3·1e5)的序列,m (1 ≤ p ≤ 3·1e5)个询问,每次询问a,a+b,a+2b+...<=n的和 思路 一开始一直想也想不到怎么分,去维护哪些 ...
- react元素获取e时,点击target为空的现象
今天呢,学习react过程中,我要获取一个元素的e, checkAll=(e)=>{ console.log(e) console.log(e.target) } render() { retu ...
- Firebase REST API
use firebase and firesharp to do a Library management system . look github.com/ziyasal/FireSharp
- if循环后打印数据竖行输出和横排输出
代码A如下: def func(*kargs): return kargs, l = func(5,3,4,5,6) for i in l: print (i) 打印结果: ...
- 关于Queries_per_sec 性能计数器
[问题描述] Queries_per_sec (QPS)是数据库两个比较重要的性能计数器指标.我们经常要求开发告知这个参数,以评估数据库的一个负载情况.下面的这段代码连上服务器,做一个简单的查询: u ...
- LeetCode刷题总结-链表
LeetCode刷题总结-链表 一.链表 链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...
- redis缓存数据库及Python操作redis
缓存数据库介绍 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站, 特 ...