5.9 enum--支持枚举类型
Posted caimouse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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--支持枚举类型的主要内容,如果未能解决你的问题,请参考以下文章