enum
模块定义了一个具备可迭代性和可比较性的枚举类型。 它可以为值创建具有良好定义的标识符,而不是直接使用字面上的字符串或者整数
1.创建枚举
from enum import Enum
class VIP(Enum):
YELLOW = 1
GREEN = 2
BLANK = 3
RED = 4
>>> print(VIP.YELLOW)
VIP.YELLOW
2.枚举类和普通类比较
枚举类型是一个特殊的类:
枚举值不可变性
from enum import Enum
# 普通类
class Diamond():
YELLOW = 1
GREEN = 1
BLANK = 3
RED = 4
# 枚举类
class VIP(Enum):
YELLOW = 1
GREEN = 1
BLANK = 3
RED = 4
## 枚举值不可变性
>>> Diamond.GREEN = 2
>>> VIP.GREEN = 2
>>> print(Diamond.GREEN)
2
>>> print(VIP.GREEN)
'报错'
枚举类一旦赋值,枚举中的值将不能再被重新赋值
枚举标签不可重复
from enum import Enum
# 普通类
class Diamond():
YELLOW = 1
YELLOW = 2
BLANK = 3
RED = 4
# 枚举类
class VIP(Enum):
YELLOW = 1
YELLOW = 2
BLANK = 3
RED = 4
'枚举类,编译时就会报错'
3.枚举别名
from enum import Enum
# 普通类
class Diamond():
YELLOW = 1
GREEN = 1
BLANK = 3
RED = 4
# 枚举类
class VIP(Enum):
YELLOW = 1
GREEN = 1
BLANK = 3
RED = 4
## 枚举不允许有相同值
>>> print(Diamond.GREEN)
1
>>> print(VIP.GREEN)
VIP.YELLOW
当我们在枚举中定义了YELLOW
和GREEN
赋值为相同值时,打印VIP.GREEN
,普通类输出1,但是枚举类输出VIP.YELLOW
,这是因为YELLOW
赋值为1后,在对GREEN
赋值为1,此时GREEN就不是一个变量,而是YELLOW
的一个别名,表示相同的枚举类型
4.获取值、名称、类型
from enum import Enum
class VIP(Enum):
YELLOW = 1
GREEN = 1
BLANK = 3
RED = 4
# 获取值
>>> print(VIP.YELLOW.value)
1
# 获取名称
>>> print(VIP.YELLOW.name)
'YELLOW'
# 获取类型
>>> print(VIP.YELLOW)
VIP.YELLOW #这个是枚举类型
5.枚举遍历
from enum import Enum
class VIP(Enum):
YELLOW = 1
GREEN = 1
BLANK = 3
RED = 4
for v in VIP:
print(v)
VIP.YELLOW
VIP.BLANK
VIP.RED
如果尝试遍历枚举类型,则后面重复的不会被打印出来。但是,如果想要获取别名,我们可以使用属性“members”,它是一个OrderedDict,包括所有定义的枚举名称,包括别名。
for v in VIP.__members__.items():
print(v)
6.枚举的比较运算
枚举类型不能做大小比较,但是可以做身份比较和等值比较。
from enum import Enum
class VIP(Enum):
YELLOW = 1
GREEN = 2
BLANK = 3
RED = 4
>>> print(VIP.YELLOW == VIP.GREEN)
Flase
>>> print(VIP.YELLOW == 1)
Flase
# 身份比较
>>> print(VIP.YELLOW is VIP.YELLOW)
True
# 不支持大小比较
>>> print(VIP.GREEN > VIP.YELLOW)
Flase
7.枚举转换
from enum import Enum
class VIP(Enum):
YELLOW = 1
GREEN = 2
BLANK = 3
RED = 4
>>> num = 1
>>> print(VIP(num))
VIP.YELLOW
8.限制枚举数据类型
from enum import IntEnum,unique
@unique #限制VIP枚举不能有重复值
class VIP(IntEnum): #限制枚举类只能是数值
YELLOW = 1
GREEN = 2
BLANK = 3
RED = 4