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  深圳

时间: 2024-08-05 11:17:17

5.9 enum--支持枚举类型的相关文章

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

一.前言 在我们日常的开发过程中,我们经常定义使用常量:在Effective Java建议用枚举来替换常量的使用,提高我们代码的质量,总结一下枚举定义常量的基本使用 二.枚举类型说明      1.枚举是一种数据类型,在jdk1.6版本才开始引入: 2.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内: 3.枚举定义了一组业务类型相同的成员且成员的语义清晰: 三.常量与枚举类型对比说明 常量存在问题: 1) 无法限制开发员继承/实现接口. 2) 开发员能够在子接口里继续添加常量.而

enum 枚举类型  选择输出

public class xxxxennum : MonoBehaviour { public enum PlayerType{ Soldier,Nurse,BlackSmith } public PlayerType playerType; // Use this for initialization void Start () { SayHello(); } void SayHello(){ switch (playerType) { case PlayerType.Soldier: pri

深入理解Java枚举类型(enum)

[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/71333103 出自[zejian的博客] 关联文章: 理解Java位运算 深入理解Java类型信息(Class对象)与反射机制 本篇主要是深入对Java中枚举类型进行分析,主要内容如下: 理解枚举类型 枚举的定义 枚举实现原理 枚举的常见方法 Enum抽象类常见方法 编译器生成的Values方法与ValueOf方法 枚举与Clas

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

枚举类型 枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型.所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内. 创建枚举,需要使用关键字 enum.枚举类型的一般形式为: enum enum-name { list of names } var-list;enum-name 是枚举类型的名称.名称列表 { list of names

C语言——enum枚举类型

enum是枚举类型,实际上就是定义一组值,enum定义数据类型的值只能是这一组值中的一个. 在实际生活中,很多问题都与是这样的.如人的性别,只有男女两种:一星期有七天:月份只有十二个值. 如下定义一周七天的值: #include <stdio.h> typedef enum { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }week; int main() { printf("%d %d %d %d %

Entity Framework 的枚举类型

新增数据模型,新增“实体”之后,新增“枚举类型”,创建Enum值,将“实体”中的列和Enum关联,选中“实体”中的列属性改变类型为Enum名称,生成数据库…… 如下转自:http://item.congci.com/item/entity-framework-meiju-leixing-enum 第一步:先创建一个实体对象,在VS 2012里面实体对象还可以修改实体颜色 第二步:对象已经有了,接着创建一个Type,Type为Enum,内部与外部(Internal and External),在空

java枚举类型

jvm并不支持枚举类型,java中枚举类型是在编译器层面上实现的,先看如下代码: package demo.nio; public class EnumDemo { public static enum Color{ Red(20), Green(10), Blue(30); Color(int v){ this.value = v; } private int value; public int getValue(){ return this.value; } } public static

Java枚举类型的用法

JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 1.用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法.而且枚举类型可以帮助我们检测许多的编译失误. 例如: package enumTest; public enum Color { RED,BLANK,YELLOW } 测试代码: package

iOS 枚举类型学习

一,两者的用法 枚举类型定义用关键字enum标识,形式为: enum 标识符 { 枚举数据表 }:枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定.数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增.enum status{ copy, delete }:枚举类型status仅有两个数据,一个是copy,一个是delete,序号为0.1,代表复制与删除.enum status{ copy=6, delete }:则copy的序号为6,delete的序号为7.   

枚举类型或运算

1.使用枚举类型进行按位或运算,应该用2的幂(1.2.4.8等) 来定义枚举常量,以确保组按位运算结果与枚举中的各个标志都不重叠: 2.当可能需要对枚举类型进行按位运算时,应该对枚举使用FlagsAttribute /Flags属性,这样当对枚举使用按位运算时才可以解析出各个具体的枚举常量名,而不仅仅是组合值: 3.以 None 用作值为零的标志枚举常量的名称: 4.如果明显存在应用程序需要表示的默认情况,考虑使用值为零的枚举常量表示默认值. 示例代码1,不加FlagsAttribute: 1