枚舉類

當須要定義常量時,一個辦法是用大寫變量經過整數來定義
好處是簡單,缺點是類型是int,而且仍然是變量
Enum能夠把一組相關常量定義在一個class中,且class不可變,並且成員能夠直接比較,這樣這些相關常量就不會變化了spa

 

  使用枚舉類code

    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

 

  自定義枚舉類blog

  若是須要更精確地控制枚舉類型,能夠從Enum派生出自定義類it

    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
相關文章
相關標籤/搜索