一.枚举其实是一个类

建议标识名字用大写

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(八) 枚举详解的更多相关文章

  1. 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出来了,如果想使用最新版本,赶紧升级下 ...

  2. python3 常用模块详解

    这里是python3的一些常用模块的用法详解,大家可以在这里找到它们. Python3 循环语句 python中模块sys与os的一些常用方法 Python3字符串 详解 Python3之时间模块详述 ...

  3. Linux学习-linux系统下python升级到python3.6步骤详解,以及遇到的问题解决

    说明:一般linux会自带pyhton2.7 1.首先下载源tar包 可利用linux自带下载工具wget下载,如下所示: wget http://www.python.org/ftp/python/ ...

  4. 枚举详解之EnumSet、EnumMap用法

    枚举简单例子 /** * @author shuliangzhao * @Title: Color * @ProjectName design-parent * @Description: TODO ...

  5. python3多线程趣味详解

    python3的多线程很多人无法理解是怎么运行的,因此本文从程序猿的日常生活出发,写了一个由浅入深的多线程教程,这样子大家就不会觉得陌生了,多线程真的很简单很简单! 不要讲多线程局限于库或者框架,自己 ...

  6. C# 控件双缓冲控制 ControlStyles 枚举详解

    ControlStyles 枚举 .NET Framework 4    指定控件的样式和行为. 此枚举有一个 FlagsAttribute 特性,通过该特性可使其成员值按位组合. 命名空间:  Sy ...

  7. Mac OS X10.9安装的Python2.7升级Python3.3步骤详解

    Mac OS X10.9默认带了Python2.7,不过现在Python3.3.3出来了,如果想使用最新版本,赶紧升级下吧.基本步骤如下 第1步:官网下载Python3.3 这里面有windows和m ...

  8. Java 枚举详解

    为什么要用枚举 在博客系统中,一篇文章有且可能有这几种状态, 数据库中article文章表中state字段存储数值,表示其状态: 0(已发表Published) 1(草稿Draft) 2(撤回撤回(D ...

  9. Java基础——枚举详解

    前言: 在第一次学习面向对象编程时,我记得最深的一句话就是“万物皆对象”.于是我一直秉承着这个思想努力的学习着JAVA,直到学习到枚举(Enum)时,看着它颇为奇怪的语法……我一直在想,这TM是个什么 ...

随机推荐

  1. Java 用集合实现简单的斗地主发牌

    创建数组.集合,存放数据 public class FightAgainstLandlords { /** * poker集合,存储54张牌 */ private ArrayList<Strin ...

  2. 为什么双击打开py文件时窗口瞬间关闭了?

    当前理解,py文件里没有input() 等暂停程序运行的函数,程序运行速度太快,运行完就立马关闭了. input()调用后,程序会立即暂停,等待用户输入

  3. [HAOI2015]树上操作(树链剖分)

    [HAOI2015]树上操作(luogu) Description 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增 ...

  4. ios---apple mach-o linker error 报错解决

    问题触发场景 在新xcode环境里配置了cocoapods,并运行了自己的项目.然后某日从其他地方clone了第三方项目,打开后,有了这个报错: 问题原因 1.用cocoapods装了第三方插件后,要 ...

  5. CTF--HTTP服务--SQL注入GET参数

    开门见山 1. 扫描靶机ip,发现PCS 192.168.31.37 2. 用nmap扫描开放端口信息 3. 快速扫描全部信息 4. 探测敏感信息 5. 用浏览器打开用户登录页面 6. 使用OWASP ...

  6. 关于Windows Server 服务器 安装tomcat部署Java Web 项目的问题

    我遇到的问题是:不知道怎么配置,感觉在服务器上部署一个web项目,应该是很高大上,步骤应该很繁琐,但是,事实却不是那样.配置反而挺简单. tomcat配置:在tomcat安装目录中的conf文件夹下有 ...

  7. Word文档分节设置页码

    在一篇论文中需要将摘要和目录作为一部分设置罗马数字页码,正文部分设置阿拉伯数字页码. 大致效果如下图所示: 这里面用到了分节符,步骤如下: 1 :点击开始菜单栏下 显示/隐藏编辑标记 2:点击插入菜单 ...

  8. html块级元素的水平垂、直居中的方式

    说明 对于初学者来说,块级元素的剧中,也是一大难题,我学习的时候,也是一脸懵逼,每次遇到都要百度,但是写的多了也自然记住一些常用的剧中方式,但是还是很模糊,今天就来好好总结一些. 布局 布局即为简单, ...

  9. 在4K屏下以超过VMWare默认的最高分辨率运行Linux系统

    前言 4K 屏,有其优点也有其弊端.优点就是分辨率高,字体和图标看起来如丝一般顺滑:缺点就是字体和图标小,费眼睛.解决这个缺点的方法也很简单粗暴,就是将系统的显示比例放大.在高分屏不很普及的时候,无论 ...

  10. 吴sir 讲Python之——Pycharm的安装教程 (一)

    欢迎您进入老吴的博客,如有联系请加QQ群:1055524279 首先在Pycharm的官网下载Pycharm Pycharm官网链接:https://www.jetbrains.com/pycharm ...