枚举类
程序员文章站
2022-06-28 21:16:52
当需要定义常量时,一个办法是用大写变量通过整数来定义 好处是简单,缺点是类型是int,并且仍然是变量 Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较,这样这些相关常量就不会变化了 使用枚举类 自定义枚举类 如果需要更精确地控制枚举类型,可以从Enum派生出 ......
当需要定义常量时,一个办法是用大写变量通过整数来定义
好处是简单,缺点是类型是int,并且仍然是变量
enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较,这样这些相关常量就不会变化了
使用枚举类
from enum import enum month = enum('month', ('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec')) for name, member in month.__members__.items(): print(name, '=>', member, ',', member.value) #value属性则是自动赋给成员的int常量,默认从1开始计数 #输出:jan => month.jan , 1 #输出:feb => month.feb , 2 #输出:mar => month.mar , 3 #输出:apr => month.apr , 4 #输出:may => month.may , 5 #输出:jun => month.jun , 6 #输出:jul => month.jul , 7 #输出:aug => month.aug , 8 #输出:sep => month.sep , 9 #输出:oct => month.oct , 10 #输出:nov => month.nov , 11 #输出:dec => month.dec , 12
自定义枚举类
如果需要更精确地控制枚举类型,可以从enum派生出自定义类
from enum import enum, unique @unique #@unique装饰器可以帮助我们检查保证没有重复值 class weekday(enum): sun = 00 mon = 01 tue = 02 wed = 03 thu = 04 fri = 05 sat = 06 day1 = weekday.mon print(day1) #输出:weekday.mon print(day1.value) #输出:01,value属性是枚举常量的值 print(weekday.tue) #输出:weekday.tue print(weekday['tue']) #输出:weekday.tue,可用成员名称引用枚举常量 print(weekday['tue'].value) #输出:02 print(day1 == weekday.mon) #输出:true print(day1 == weekday.tue) #输出:false print(weekday('03')) #输出:weekday.wed,根据value值获取枚举常量 print(weekday('03').value) #输出:03,根据value值获取枚举常量 print(day1 == weekday('01')) #输出:true weekday(7) #报错 for name, member in weekday.__members__.items(): print(name, '=>', member) #输出:sun => weekday.sun #输出:mon => weekday.mon #输出:tue => weekday.tue #输出:wed => weekday.wed #输出:thu => weekday.thu #输出:fri => weekday.fri #输出:sat => weekday.sat