枚举的结构
from enum import Enum class Color(Enum): RED = 1 YELLOW = 2 BLUE = 3 print(Color.RED) # Color.RED
- 从enum导入Enum,并让自定义的枚举类继承Enum
- 枚举类内的标签最好用大写字母来表示常量
枚举类与普通类的区别
- 标签值不可被修改
- 一个标签只能对应一个值,但多个标签可以对应相同的值(别名)
以下两种情况都会报错:
from enum import Enum class Color(Enum): RED = 1 YELLOW = 2 BLUE = 3 Color.RED = 2
from enum import Enum class Color(Enum): RED = 1 RED = 2 YELLOW = 2 BLUE = 3
枚举类型、枚举名称、枚举值之间的区别
from enum import Enum class Color(Enum): RED = 1 YELLOW = 2 BLUE = 3 print(Color.RED) print(type(Color.RED)) # Color.RED # <enum 'Color'> print(Color.RED.name) # 获取枚举类型的名称 print(type(Color.RED.name)) # RED # <class 'str'> print(Color.RED.value) # 获取枚举类型的真实值 print(type(Color.RED.value)) # 1 # <class 'int'>
枚举类型可以用读取字典的方式来读取,并且可以遍历:
from enum import Enum class Color(Enum): RED = 1 YELLOW = 1 BLUE = 3 print(Color['RED']) # 访问 for e in Color: # 遍历 print(e) # 当多个标签对应相同值时,第一个定义的为主名,其他的为别名 # 直接遍历无法输出别名,可以用__members__来全部输出 for e in Color.__members__: print(e)
枚举类型间的比较
枚举类型可以做等值比较和身份比较,但是不能做大小比较:
from enum import Enum class Color(Enum): RED = 1 YELLOW = 1 BLUE = 3 print(Color.RED == Color.YELLOW) # True print(Color.RED is Color.YELLOW) # True
将数字转换为枚举类型
from enum import Enum class Color(Enum): RED = 1 YELLOW = 1 BLUE = 3 e = Color(1) # 根据数字来找到对应的枚举类型 print(e) # Color.RED
其他
规定枚举类型对应值只能是数字:
from enum import IntEnum # 使用IntEnum class Color(IntEnum): RED = 1 YELLOW = 2 BLUE = 3
规定不可取别名(每个标签必须对应不同值):
from enum import Enum,unique # 使用unique装饰器 @ unique class Color(Enum): RED = 1 YELLOW = 2 BLUE = 3