枚举类
.
描述
枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合(例如星期,月份)
在没有专门提供枚举类型的时候,一般通过字典或类实现
Color = {
‘Red' : 1,
'Green':2,
'Blue':3,
}
class Color:
Red = 1
Green = 2
Blue = 31
2
3
4
5
6
7
8
9
10
它的隐患在于可以被修改
使用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))1
2
3
4
5
6
7
8
9
10
11
输出
Color.Red
True1
2
3
4
注:枚举类型不可实例化,不可更改
定义枚举
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
bule = 31
2
3
4
5
6
7
@unique装饰器可以帮助检查,保证没有重复值
1.可以通过成员名来获取成员,也可以通过成员值之来获取成员
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
bule = 3
print(Color['red'])
print(Color(1))1
2
3
4
5
6
7
8
9
10
输出
Color.red
Color.red1
2
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)1
2
3
4
5
6
7
8
9
10
11
输出
red
11
2
3.支持迭代的方式遍历成员
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
bule = 3
for color in Color:
print(color)1
2
3
4
5
6
7
8
9
10
11
输出
Color.red
Color.green
Color.bule1
2
3
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)1
2
3
4
5
6
7
8
9
10
11
输出
('red', )
('green', )
('bule', )1
2
3