實際開發中,我們離不開定義常數,當我們需要定義常數時,其中一個辦法是用大寫變數透過整數來定義,例如月份:
JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12
當然這樣做簡單快捷,缺點是類型是int ,並且仍然是變數。
那有沒有什麼好的方法呢?
這時候我們定義一個 class 類型,每個常數都是 class 裡面唯一的實例。正好Python 提供了Enum 類別來實現這個功能如下:
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- 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) # 直接引用一个常量 print('\n', Month.Jan)
輸出的結果如下:
可見,我們可以直接使用Enum 來定義一個枚舉類。上面的程式碼,我們創建了一個有關月份的枚舉類型Month ,這裡要注意的是構造參數,第一個參數Month 表示的是該枚舉類的類名,第二個tuple 參數,表示的是枚舉類別的值;當然,枚舉類別透過__members__ 遍歷它的所有成員的方法。注意的一點是 , member.value 是自動賦給成員的 int型別的常數,預設是從 1 開始的。而 Enum 的成員皆為單例(Singleton),且不可實例化,不可變更
下一節