列舉
將所有的項目全部都集合在一個類別內, 比如 1~12月的英文縮寫. 集合成Month class, 日後需要使用到其中的一個, 比如五月, 就直接打Month.May即可. Month.May.name即會傳回 “May” 字串,另外使用Month.May.value, 會顯示編號5.
請注意, 編號由1開始
from enum import Enum
Month=Enum('Month',('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'))
print(Month.May)
print(Month.May.name)
print(Month.May.value)
結果
Month.May
May
5
for-in 所有集合
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("%s => %s : %d" %(name, member, member.value))
結果:
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
自訂列舉
若想要更細部的控制列舉的編號, 可以採用自訂列舉. 在下面代碼中, 裝飾器@unique可以協助檢查是否有重複值, 不論是 name 或者是 value, 任何一個重複, 執行時期都會跳出例外
from enum import Enum, unique
@unique
class Solar(Enum):
Mercury = 10
Venus = 20
Earth = 30
Mars = 40
Jupiter = 50
Saturn = 60
Uranus = 70
Neptuen = 80
Pluto = 90
print("Enum:%s, name:%s, value:%d" % (Solar.Venus, Solar.Venus.name, Solar.Venus.value ))
print(Solar(40))
結果 :
Enum:Solar.Venus, name:Venus, value:20
Solar.Mars
