定义常量时,我们可以用到枚举类。
在没有专门提供枚举类型的时候,一般就通过字典或类来实现:
Color = {
'RED' : 1,
'GREEN': 2,
'BLUE' : 3,
}
class Color:
RED = 1
GREEN = 2
BLUE = 3
这种来实现枚举如果小心翼翼地使用当然没什么问题,毕竟是一种妥协的解决方案。它的隐患在于可以被修改。
枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。
from enum import Enum
class Color(Enum):
red = 1
blue = 2
yellow = 3
枚举类型不可实例化,不可更改。
定义枚举类时,成员值不允许相同。成员名可以相同,相同的成员名看成是第一个相同成员名的别名
如果希望成员名亦不相同,可以添加@unique装饰器
from enum import Enum,unique
@unique
class Color(Enum):
red = 1
blue = 2
yellow = 3
枚举取值
枚举类中的每一个成员都有名称属性和值属性
可以通过成员名或者成员值来访问成员
print(Color['red']) # Color.red 通过成员名来获取成员
print(Color(1)) # Color.red 通过成员值来获取成员
member = Color.red
print(member.name) # red
print(member.value) # 1
支持迭代的方式遍历成员,按定义的顺序,如果有值重复的成员,只获取重复的第一个成员:
for color in Color:
print(color)
特殊属性 members 是一个将名称映射到成员的有序字典,也可以通过它来完成遍历:
for color in Color.__members__.items():
print(color) # ('red', <Color.red: 1>)
>>> for name, member in Color.__members__.items():
... print(name, '=>', member)