一.枚举其实是一个类

建议标识名字用大写

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. Maven 基础(二) | 解决依赖冲突的正确姿势

    一.依赖原则 假设,在 JavaMavenService2 模块中,log4j 的版本是 1.2.7,在 JavaMavenService1 模块中,它虽然继承于 JavaMavenService2 ...

  2. cf - 429D

    Iahub and Sorin are the best competitive programmers in their town. However, they can't both qualify ...

  3. 关于爬虫的日常复习(6)—— pyquery库

  4. RabbitMQ入门(二)工作队列

      在文章RabbitMQ入门(一)之Hello World,我们编写程序通过指定的队列来发送和接受消息.在本文中,我们将会创建工作队列(Work Queue),通过多个workers来分配耗时任务. ...

  5. selenium之窗口滚动

    在这里和大家分享一下,selenium里面常用于处理窗口滚动的方法. location_once_scrolled_into_view 一般用于定位窗口底部元素.将窗口拉到最底部. window.sc ...

  6. .net mvc Bundle 自己配置

    遇到了个坑 来和大家分享一下 1.一个空的mvc项目需要引用 System.Web.Optimization 2.然后nuget添加 microsoft ASP.NET WEB OPTIMIZATIO ...

  7. python实现数据结构-栈

    注:本文档主要是学习<Python核心编程(第二版)>时的练习题. 栈是一种"后进先出"的数据结构(LIFO),是一种操作受限的线性结构,数据只能从栈顶进入和栈顶出去. ...

  8. Mac 查看端口占用情况及杀死进程

    查看端口占用情况命令 sudo lsof -i :9000 冒号后面就是你需要查看的端口号. TheEternityZhang-MacBook:project zhtony$ sudo lsof -i ...

  9. 用tensorflow的Eager执行模式

    一.即时执行模式 import tensorflow as tfimport tensorflow.contrib.eager as tfetfe.enable_eager_execution() a ...

  10. vijos 分梨子

    点击打开题目 很有(wei)趣(suo)的一道题 暴力解法也不难,枚举大小下限与甜度下限,在一个一个地试 显然 O(n^3) 炸掉 但如何将其缩短,只好从那个式子来入手了: C1⋅(ai−a0)+C2 ...