两种方式定义枚举类:python
一、直接使用Enum列出多个枚举值来建立枚举类。函数
二、经过集成Enum基类派生枚举类。spa
程序示范:code
一、直接使用Enum列出多个枚举值来建立枚举类。对象
from enum import Enum #定义Month枚举类 Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
上面的代码使用Enum()函数来建立枚举类,该方法第一个参数:枚举类的类名;第二个参数:元组,用于列出全部枚举值。blog
经过枚举值访问每一个枚举元素,每一个元素都有name,value两个属性,其中name属性值为该枚举值的变量名,value表明该枚举值的序号(序号一般从1开始)。继承
# 遍历Month全部成员 for member in Month: print(member.name, member.value) # 直接使用枚举 print(Month.Jan) # Month.Jan print(Month.Jan.name) # Jan print(Month.Jan.value) # 1 # 经过枚举变量名或枚举值来访问指定枚举对象 print(Month['Jan']) # Month.Jan print(Month(1)) # Month.Jan
此外 python 还为枚举提供了一个__members__属性,该属性返回一个dict字典,字典包含了该枚举的全部枚举实例。it
# 遍历Month枚举的全部成员 for name, member in Month.__members__.items(): print(name, '=>', member, ',', member.value)
输出:
Jan => Month.Jan , 1
...
二、经过继承 Enum 来派生枚举类,定义复杂的枚举class
from enum import Enum, unique @unique class Weekday(Enum): Sun = 0 # Sun的value被设定为0 Mon = 1 Tue = 2 Wed = 3 Thu = 4 Fri = 5 Sat = 6
@unique
装饰器能够帮助咱们检查保证没有重复值。import
如果不加@unique装饰器,枚举成员名容许重复。
访问这些枚举类型能够有若干种方法:
print(Weekday.Tue) # Weekday.Tue print(Weekday['Tue']) # Weekday.Tue print(Weekday.Tue.value) # 2 print(Weekday(1)) # Weekday.Mon