欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

枚举类

程序员文章站 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