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--支持枚举类型的更多相关文章

  1. 实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以

    通常,我们都是在业务层和界面层使用枚举类型,这能够为我们编程带来便利,但在数据访问层,不使用枚举类型,因为很多数据库都不支持,比如我们现在用的SqlServer2008就不支持枚举类型的列,用的时候也 ...

  2. Enum(枚举类型)的基本应用

    一.前言 在我们日常的开发过程中,我们经常定义使用常量:在Effective Java建议用枚举来替换常量的使用,提高我们代码的质量,总结一下枚举定义常量的基本使用 二.枚举类型说明      1.枚 ...

  3. enum(枚举类型)

    可以使用枚举类型声明代表整数常量的符号名称. 通过enum,创建一个新类型,并指定它可以拥有的值.(就像平常用一个整形变量,我们指定它等于0的时候代表什么,1呢,2呢...而通过枚举,就增加了程序的可 ...

  4. [转载] Java中枚举类型的使用 - enum

    目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...

  5. C++(浅析枚举类型-enum)

    枚举类型 枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓&quo ...

  6. Entity Framework 的枚举类型

    新增数据模型,新增“实体”之后,新增“枚举类型”,创建Enum值,将“实体”中的列和Enum关联,选中“实体”中的列属性改变类型为Enum名称,生成数据库…… 如下转自:http://item.con ...

  7. 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)

    Enum的简介 枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型. 在java语言中,枚举类型是一个完整功能的类 ...

  8. java枚举类型

    jvm并不支持枚举类型,java中枚举类型是在编译器层面上实现的,先看如下代码: package demo.nio; public class EnumDemo { public static enu ...

  9. Java枚举类型的用法

    JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 1.用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fia ...

  10. java 枚举类型知识点记录

    在日常开发中,我们常用接口装常量或者在类里面写静态常量,java1.5以后加入了枚举类型enum.枚举类型是由一组固定的常量组成的类型.枚举本质是int值.因为枚举类型没有可以访问的构造器,所以枚举类 ...

随机推荐

  1. Select 选择算法 - 编程珠玑(续) 笔记

    Select 算法 I 编程珠玑(续)介绍的 Quickselect 算法 选择 N 个元素中的第 K 小(大)值,是日常场景中常见的问题,也是经典的算法问题. 选取 N 个元素的数组的中的第 K 小 ...

  2. win7防火墙里开启端口的图文教程

    转载于:http://www.cnblogs.com/vipsoft/archive/2012/05/02/2478847.html 开启端口:打开“控制面板”中的“Windows防火墙”,点击左侧的 ...

  3. Linq中where查询

    Linq的Where操作包括3种形式:简单形式.关系条件形式.First()形式. 1.简单形式: 例:使用where查询在北京的客户 var q = from c in db.Customers   ...

  4. double和decimal的ToString("#.##")方法使用的是四舍五入;

    顺带提一下: 1. double和decimal的ToString("#.##")方法使用的是四舍五入: 2. 静态类System.Math下的Round(decimal d, i ...

  5. VBA关闭工作簿和退出Excel

    VBA关闭工作簿和退出Excel链接:http://www.excelpx.com/thread-233045-1-1.html 兰色幻想VBA基础入门和高级开发全套80集视频教程,助你成为VBA开发 ...

  6. [React] Controlling Form Values with React

    In this lesson we'll talk about controlling the value for inputs, textareas, and select elements. We ...

  7. 怎么样让用户认为产品更有价值?让他们DIY吧!

    怎么样让用户认为产品更有价值?用户不须要镶钻.贴金的产品,答案可能比你想的简单,那就是在产品里加入DIY的元素. 几年前,学者做了一系列的调查.他们发现当人们自己打造产品的时候.他们会更加珍惜它,并觉 ...

  8. [Zabbix] 怎样实现邮件报警通知以及免费短信报警通知

     前提条件: (1) zabbixserver端已经安装成功而且执行. (2) zabbixclient已经成功建立而且执行. 1 下载而且安装msmtp软件 Wget http://sourcefo ...

  9. You have ettempted to queue to many files.You may select one files.

    <script type="text/javascript" src="/script/swfupload/swfupload.js"></s ...

  10. SSH无password登陆配置

    摘录一 在192.168.42.142机器上 1)执行:ssh-keygen -t rsa 2)然后拍两下回车(均选择默认) 3)执行: ssh-copy-id -i /root/.ssh/id_rs ...