# #Enum 練習: from enum import Enum, unique #1、函數式API調用 # 第一個參數是枚舉名稱 # 第二個參數是枚舉成員名稱的源 Month = Enum('Month',('Jan','Feb','Mar')) for name,member in Month.__members__.items(): # list all enum members,including aliases,既然是map自然就會有items print(name,'=>',member,',',member.value) #value屬性是自動賦給成員的int常量,默認從1開始記數 #2、自定義枚舉類 @unique #裝飾器可以幫助我們檢查保證沒有重復值。 ##如果錯誤,將返回: #line 834, in unique ## (enumeration, alias_details)) ##ValueError: duplicate values found in <enum 'Weekday'>: Tom -> Sun class Weekday(Enum): Sun = 0 # Sun的value被設定為0 Mon = 1 Tue = 2 Wed = 3 Thu = 4 Fri = 5 Sat = 6 Tom=0 #test a=Weekday print(a.Sun) print(a.Sun.value) print(a['Tue']) print(a['Tue'].value) print(a(0)) print(a(0).value) for key,value in a.__members__.items(): print(key,'-',value) ##Sun - Weekday.Sun ##Mon - Weekday.Mon ##Tue - Weekday.Tue ##Wed - Weekday.Wed ##Thu - Weekday.Thu ##Fri - Weekday.Fri ##Sat - Weekday.Sat print('-'*100) #作業: #把Student的gender屬性改造為枚舉類型,可以避免使用字符串: class Gender(Enum): Male = 0 Female = 1 class Student(object): def __init__(self, name, gender): self.name = name if isinstance(gender,Gender): self.gender = gender else: print('gender must be Gender type.') return 0 # 測試: bart = Student('Bart', Gender.Male) if bart.gender == Gender.Male: print('測試通過!') else: print('測試失敗!')