19 枚举
Posted scopicat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19 枚举相关的知识,希望对你有一定的参考价值。
枚举的概念
枚举也是类
定义枚举需要先导入枚举模块:
from enum import Enum
枚举类型的定义
class Color(Enum): RED = 1 YELLOW = 2 # 且它们不是常量! GREEN = 3 #必须大写,且各枚举属性的值不能相等 print(Color.RED) #打印结果就是Color.RED 这就是枚举的意义所在
枚举与普通的类比有什么优势
枚举类型的属性值是不能更改的。
枚举的相关操作
获取枚举标签(属性)的值:类名.属性名.value
获取枚举标签名(属性名):类名.属性名.name 注意:打印的结果是str型
print(type(Color.RED)) print(type(Color.RED.name)) 结果: <enum ‘Color‘> <class ‘str‘>
枚举的遍历
for c in Color: print(c) 结果: Color.RED Color.RED Color.YELLOW Color.GREEN
枚举之间的比较运算
枚举之间的比较不是value的比较,而是对象的比较。
所以可以做等值比较,即 == 或 is 或 is not比较:
# 赋值Color为Color1 print(Color.RED == Color.RED) print(Color.RED == Color1.RED) print(Color.RED is Color1.RED) print(Color.RED is not Color1.RED) 结果: True False False True
枚举转换
一般将枚举标签的值存在数据库而不是枚举标签。
所以当从数据库将value值提出来,要得到枚举的标签:
# a为接收来自数据库的枚举的变量 a = 1 #假设a接收到的值为1 #转换为枚举标签 : 枚举类名(a) 如上面的: print(Color(1)) 结果为: Color.RED
枚举需要注意的事情
1.枚举不能有两个相同名的标签
2.两个不同的标签的value不能相同,如果相同,则表示一个是另一个的别名,且普通遍历时不会将别名打印出来(若想遍历出来,使用.__member__属性)
IntEnum
Enum类下的枚举标签的值,可以是数值型,也可以是字符串类型。
但当想要其类型仅为数值型时,使用IntEnum就行了。
from enum import IntEnum
@unique
当你不想个标签起别名(不同的标签名相同的value)
导入unique,然后声明类时在类上面加上@unique即可,此时如果起别名会报错:
from enum import unique @unique class B(Enum): AA = 1 BB = 1
报错结果:
ValueError: duplicate values found in <enum ‘B‘>: BB -> AA
以上是关于19 枚举的主要内容,如果未能解决你的问题,请参考以下文章
Cg入门19:Fragment shader - 片段级模型动态变色
PAT1049-----枚举法,找规律题,注意降低时间复杂度
android.view.InflateException:二进制 XML 文件第 15 行:二进制 XML 文件第 19 行:膨胀类片段时出错
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段