在Python中想要实现枚举功能的方式比较多,可以通过字典这一数据结构,利用键与值的对应关系,可以实现枚举的功能。
my_Enum={ 'red':1, 'yellow':2, 'blue':3 } print(my_Enum['red'])
也可以使用类来建立一个属性名与属性值之间的对应关系来实现枚举的功能,然后用.操作符来读取
class my_Enum { red=1, yellow=2, blue=3 } my_Enum.red
但是用以上两种方式出现的问题也是很明显的:
1.枚举值可以修改
2.用类定义的话,这些枚举功能的类可以被实例化
3.枚举值是否重复无法检查
在Python3.4引入了enum模块,这个模块就是为了解决上面所说到的问题的,使用的时候首先引入模块:
import enum
enum里面提供了Enum和IntEnum等类,可以用来继承。
当然,这些类就被限制了,
1.不能被继承
2.定义之后不能在类内修改
3.枚举名称不能重复。如果有值重复的情况,那么后者的名称将会是前者的别名,其实是一个对象。
要控制枚举值不能重复,可以在枚举类之前加上@unique
对枚举类的操作:
from enum import IntEnum class my_Enum(IntEnum): red=1, green=2, blue=3, what=3, yellow=9 #按名字取出枚举的值 print(my_Enum['red']) print(my_Enum['what']) #枚举的值返回枚举名字 print(my_Enum(9)) print(my_Enum['red'].name) print(my_Enum['red'].value) #可以用for in迭代 for i in my_Enum: print(i.name,'->',i.value)
运行结果:
my_Enum.red my_Enum.blue my_Enum.yellow red 1 red -> 1 green -> 2 blue -> 3 yellow -> 9