枚举类
.
- 描述
枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合(例如星期,月份)
在没有专门提供枚举类型的时候,一般通过字典或类实现
Color = {
‘Red' : 1,
'Green':2,
'Blue':3,
}
class Color:
Red = 1
Green = 2
Blue = 3
它的隐患在于可以被修改
- 使用Enum
使用标准库提供的Enum就可以实现这个功能
例
from enum import Enum
class Color(Enum):
Red = 1
Green = 2
Blue = 3
print(Color.Red)
print(repr(Color.red))
print(type(Color.red))
print(isinstance(Color.red, Color))
输出
Color.Red
<Color.Red: 1>
<enum 'Color'>
True
注:枚举类型不可实例化,不可更改
- 定义枚举
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
bule = 3
@unique
装饰器可以帮助检查,保证没有重复值
1.可以通过成员名来获取成员,也可以通过成员值之来获取成员
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
bule = 3
print(Color['red'])
print(Color(1))
输出
Color.red
Color.red
2.每个成员都有名称属性和值属性
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
bule = 3
me = Color.red
print(me.name)
print(me.value)
输出
red
1
3.支持迭代的方式遍历成员
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
bule = 3
for color in Color:
print(color)
输出
Color.red
Color.green
Color.bule
4.特殊属性__members__是一个将名称映射到成员的有序字典,也可以通过它来完成遍历
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
bule = 3
for color in Color.__members__.items():
print(color)
输出
('red', <Color.red: 1>)
('green', <Color.green: 2>)
('bule', <Color.bule: 3>)