5.9 enum--支持枚举类型

Posted caimouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.9 enum--支持枚举类型相关的知识,希望对你有一定的参考价值。

enum模块提供了枚举类型的支持。枚举类型是由一个名称和一个统一值来组成,值是常量的值,它们之间可以通过名称进行比较和引用,还可以迭代访问。

5.9.1 模块内容

本模块主要定义了两种枚举类型:EnumIntEnum。定义了一个装饰器函数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--支持枚举类型的主要内容,如果未能解决你的问题,请参考以下文章

Java 枚举类的基本使用

C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法

sql enum类型

c语言,有没有办法遍历枚举类型

Java enum(枚举)的用法详解(转)

Java enum的用法详解