简介:
当我们需要定义一些特定有限数量的常量、标签、类型等的时候,最佳方式就是使用枚举。枚举一般用于表示某些特定的有限集合。例如月份、季节、星期等。
本篇主要介绍python2.7中的枚举类。即enum中的Enum类。python3.4开始有内置枚举类,在python2.7中需要指定enum34安装。
enum中有Enum和IntEnum两个枚举class。IntEnum的最大特性就是指定枚举值只能是int类型。
安装:
pip install enum34
# 注意这里是enum34,会安装和python3.4中相同的枚举类
# 如果直接执行pip install enum,会安装另外一个enum模块,也支持枚举,但是功能较少。
用法 定义:
# *******************************定义
from enum import Enum, unique
# 这行unique装饰器可以让枚举类中不能有重复值
# @unique
class ColorEnum(Enum):
RED = "red"
GREEN = "green"
BLUE = "blue"
# PINK = "red"
# 这里如果加上了unique装饰器,运行时会报错duplicate names
# 没加装饰器,可以设置相同属性。但是PINK会被当作RED的别名,即 ColorEnum.PINK
取值
# ********************************* 取值
print ColorEnum.RED
# 输出 ColorEnum.RED, 注意这里无法输出值
print ColoeEnum.RED.value
# 输出 “red” value表示枚举的值
print ColorEnum.RED.names
# 输出 RED name表示输出枚举变量
使用
# 一般用于表示特定有限集合值,常量集合,避免多处定义,避免重复值
内置属性
print ColorEnum._member_names_
# 输出 ['Monday', 'TuesDay', 'WednesDay'] 即全部枚举变量的列表
print ColorEnum._value2member_map_
# 输出 {1: <EnumWeek.Monday: 1>, 2: <EnumWeek.TuesDay: 2>, 3: <EnumWeek.WednesDay: 3>}
# 这是一个字典,字典键是枚举值,值是枚举变量
# 通过这两个内置属性可以轻易获取全部枚举值和变量
print ColorEnum.__members__.items()
# 得到全部枚举值
遍历
# 遍历
for v in ColorEnum:
print v.name
print v.value
比较
print ColorEnum.RED == ColorEnum.GREEN
# 输出false 比较运算,可以比较枚举值是否相等
print ColorEnum.RED is EnumColor.PINK
# PINK未注释时,输出True, 比较枚举值是否是同一个
# 不支持大小比较
特性:
- 可以遍历
- 可以用 == 或者 is 比较
- 获取全部枚举变量 参照上边语法
- 获取全部枚举变量和值。参照上面语法
- 装饰器unique可以决定是否能有重复值。(实际上重复枚举值无意义,后面重复值是前面枚举变量的别名,引用时只会指向第一个)