列舉

      在〈列舉〉中尚無留言

列舉

將所有的項目全部都集合在一個類別內, 比如 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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *