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是个什么 ...
随机推荐
- 小程序中的pick
picker:从底部弹起的滚动选择器. 属性:model string类型 说明:选择器类型 : selector 普通选择器 multiSelector 多列选择器 time 时间选择 ...
- Airtest入门篇
Airtest是啥? 简单理解:基于图像识别的UI自动化测试框架 俗人理解:截图即可完成自动化测试 适用场景:游戏.APP.PC软件,支持Window.Android.IOS Airtest官方文档 ...
- IDEA新建maven项目没有webapp目录解决方法
转载地址:https://www.cnblogs.com/oldzhang1222/p/10429827.html 先创建的页面修改路径 修改路径如下 添加并完善路径\src\main\webapp ...
- 把 CPU “玩”起来
前言 从开始学习编程之后,就渐渐痴迷于技术,平时遇到购书满减活动时就忍不住买一堆书.前两天闲着无聊,翻开了去年买的<编程之美>,目录里的“让 CPU 占用率听你指挥”吸引力我的眼球.这一年 ...
- 力扣337——打家劫舍 III
这一篇也是基于"打家劫舍"的扩展,需要针对特殊情况特殊考虑,当然其本质还是动态规划,优化时需要考虑数据结构. 原题 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃 ...
- influxdb的命令们
InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据.而InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计 ...
- JAVA WebSocket 使用时需要注意的地方
最近在做一个项目,需要用WebSocket与另外一个平台建立通讯,来获取项目业务需要的实时数据,因此项目一启动,后台就要与另外一个平台建立WebSocket连接并且要保证他们的之间有且只有一条持续畅通 ...
- react-native--->RN发送/接收事件机制
import { AppRegistry, StyleSheet, Text, View, Platform, NativeAppEventEmitter, DeviceEventEmitter, } ...
- composer intall 报错
报错 [Composer\Exception\NoSslException] The openssl extension is required for SSL/TLS protection but ...
- IIS 无法访问请求的页面,因为该页的相关配置数据无效。
解决方法:控制面板-->程序和功能-->打开或关闭windows功能-->角色的这里,如果还未安装“web服务器(IIS)”,则选择“添加”.如果已经安装了,则选择“web服务器(I ...