5.9 enum--支持枚举类型
enum模块提供了枚举类型的支持。枚举类型是由一个名称和一个统一值来组成。值是常量的值。它们之间能够通过名称进行比較和引用,还能够迭代訪问。
5.9.1 模块内容
本模块主要定义了两种枚举类型:Enum和IntEnum。定义了一个装饰器函数unique(),以便保证全部枚举常量的唯一性。
class enum.Enum
构造枚举常量的基类。
样例:
#python 3.4
import enum
class Color(enum.Enum):
red = 1
green = 2
blue = 3
print(Color.red, repr(Color.red))
print(Color.green)
print(Color.blue)
结果输出例如以下:
Color.red <Color.red: 1>
Color.green
Color.blue
class enum.IntEnum
构造以整数值为枚举值的基类。本类里的枚举值能够与整数相比較,普通的枚举类是不能与整数相比較的。
此类主要用为了旧的代码兼容。或者大大地提高了便利性的场合,否则还是使用普通的枚举类会比較好,由于它不与普通类型相互发生作用,避免了一些编程上失误。
样例:
#python 3.4
import enum
class Color(enum.IntEnum):
red = 1
green = 2
blue = 3
print(Color.red, repr(Color.red))
print(Color.green)
print(Color.blue)
print(Color.red == 1)
结果输出例如以下:
Color.red <Color.red: 1>
Color.green
Color.blue
True
enum.unique()
本装饰器函数保证了每一个名称仅仅能绑定一个值,达到枚举值的唯一性。
样例:
#python 3.4
import enum
class Color(enum.IntEnum):
red = 1
green = 2
blue = 3
red = 5
print(Color.red, repr(Color.red))
print(Color.green)
print(Color.blue)
结果输出例如以下:
Traceback (most recent call last):
File "F:/temp/pywin/enum1.py", line 4, in <module>
class Color(enum.IntEnum):
File "F:/temp/pywin/enum1.py", line 8, in Color
red = 5
File "C:\Python34\lib\enum.py", line 66, in __setitem__
raise TypeError('Attempted to reuse key: %r' % key)
TypeError: Attempted to reuse key: 'red'
枚举常量能够迭代遍历:
样例:
#python 3.4
import enum
class Color(enum.IntEnum):
red = 1
green = 2
blue = 3
for i in Color:
print(i)
结果输出例如以下:
Color.red
Color.green
Color.blue
枚举常量訪问方式:
样例:
#python 3.4
import enum
class Color(enum.IntEnum):
red = 1
green = 2
blue = 3
print(Color(2))
print(Color['red'])
red = Color.red
print(red.name, red.value)
结果输出例如以下:
Color.green
Color.red
red 1
在这里提供三种訪问方式:Color(2), Color[‘red’], red.value。
通过函数API方式创建枚举常量:
样例:
#python 3.4
import enum
Animal = enum.Enum('Animal', 'ant bee cat dog')
print(Animal)
print(list(Animal))
结果输出例如以下:
<enum 'Animal'>
[<Animal.ant: 1>, <Animal.bee: 2>, <Animal.cat: 3>, <Animal.dog: 4>]
避免每一个枚举常量都须要指定值:
样例:
#python 3.4
import enum
class AutoNumber(enum.Enum):
def __new__(cls):
value = len(cls.__members__) + 1
obj = object.__new__(cls)
obj._value_ = value
return obj
class Color(AutoNumber):
red = ()
green = ()
blue = ()
for i in Color:
print(repr(i))
结果输出例如以下:
<Color.red: 1>
<Color.green: 2>
<Color.blue: 3>
蔡军生 QQ:9073204 深圳
5.9 enum--支持枚举类型的更多相关文章
- 实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以
通常,我们都是在业务层和界面层使用枚举类型,这能够为我们编程带来便利,但在数据访问层,不使用枚举类型,因为很多数据库都不支持,比如我们现在用的SqlServer2008就不支持枚举类型的列,用的时候也 ...
- Enum(枚举类型)的基本应用
一.前言 在我们日常的开发过程中,我们经常定义使用常量:在Effective Java建议用枚举来替换常量的使用,提高我们代码的质量,总结一下枚举定义常量的基本使用 二.枚举类型说明 1.枚 ...
- enum(枚举类型)
可以使用枚举类型声明代表整数常量的符号名称. 通过enum,创建一个新类型,并指定它可以拥有的值.(就像平常用一个整形变量,我们指定它等于0的时候代表什么,1呢,2呢...而通过枚举,就增加了程序的可 ...
- [转载] Java中枚举类型的使用 - enum
目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...
- C++(浅析枚举类型-enum)
枚举类型 枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓&quo ...
- Entity Framework 的枚举类型
新增数据模型,新增“实体”之后,新增“枚举类型”,创建Enum值,将“实体”中的列和Enum关联,选中“实体”中的列属性改变类型为Enum名称,生成数据库…… 如下转自:http://item.con ...
- 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)
Enum的简介 枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型. 在java语言中,枚举类型是一个完整功能的类 ...
- java枚举类型
jvm并不支持枚举类型,java中枚举类型是在编译器层面上实现的,先看如下代码: package demo.nio; public class EnumDemo { public static enu ...
- Java枚举类型的用法
JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 1.用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fia ...
- java 枚举类型知识点记录
在日常开发中,我们常用接口装常量或者在类里面写静态常量,java1.5以后加入了枚举类型enum.枚举类型是由一组固定的常量组成的类型.枚举本质是int值.因为枚举类型没有可以访问的构造器,所以枚举类 ...
随机推荐
- 8.不绑定(ngNonBindable)
转自:https://www.cnblogs.com/best/tag/Angular/ ngNonBindable指令告诉Angular编译或绑定当前DOM元素的内容.这对于要求Angular忽略那 ...
- 关于es6中对象的扩展
1.Object.is() es5比较两个值是否相等,只有两个运算符,相等(==) 和 严格相等(===),他们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0 等于 -0.es6提 ...
- phpMyAdmin出现找不到mysql扩展和Cannot log in to the MySQL server问题
环境:Centos6.5,Apache2.4, PHP5.5, MySql5.6. phpMyAdmin版本:https://files.phpmyadmin.net/phpMyAdmin/4.4.1 ...
- 访问API的方式为:localhost/api/customers, 创建自定义JSON格式化器
注意的是,访问API的方式为:localhost/api/customers,在实际中将要根据情况替换合适的端口,默认所有的WEB API都是通过/api根目录的方式访问的 创建自定义JSON格式化器 ...
- SQL SERVER 新增表、新增字段、修改字段 判断表是否存在
// 新增之前判断表是否存在 IF NOT EXISTS (SELECT NAME FROM SYSOBJECTS WHERE ID = OBJECT_ID('tb_MessageHistory')) ...
- UESTC 1599 wtmsb
这天,AutSky_JadeK看到了n张图片,他忍不住说道:“我TM社保!”. 每张图片有一个社保值,他可以合并两张图片,合并所得的图片的社保值是原来两张图片的社保值之和. 每次合并需要消耗的体力也是 ...
- CentOS6.x操作系统自带的 DM Multipath(DMMP)多路径软件配置说明。
CentOS系统下的多路径软件是操作系统自带的 DM Multipath(DMMP)工具.------------------------------------------------------- ...
- ES6学习笔记(三)字符串的扩展
ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 1.字符的Unicode表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码 ...
- 关于echarts3版本里的tree图形显示Bug、无法缩放和移动
在使用echarts3版本的js绘制tree图表的时候,如果想动态更新tree的数据,可能会出现图表渲染有异常,并且api给出的roam配置无法控制图表通过鼠标缩放和移动,如下图: 不过更改echar ...
- 03012_预处理对象executeQuery方法(实现数据库的查询)
1.概述 (1)通过预处理对象的executeQuery方法,完成记录的select语句的执行: (2)操作格式统一如下: ①注册驱动: ②获取连接: ③获取预处理对象: ④SQL语句占位符设置实际参 ...