枚舉類的使用
實際開發(fā)中,我們離不開定義常量,當(dāng)我們需要定義常量時,其中一個辦法是用大寫變量通過整數(shù)來定義,例如月份:
JAN = 1 FEB = 2 MAR = 3 ... NOV = 11 DEC = 12
當(dāng)然這樣做簡單快捷,缺點是類型是 int ,并且仍然是變量。
那有沒有什么好的方法呢?
這時候我們定義一個 class 類型,每個常量都是 class 里面唯一的實例。正好 Python 提供了 Enum 類來實現(xiàn)這個功能如下:
#!/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)
輸出的結(jié)果如下:
可見,我們可以直接使用 Enum 來定義一個枚舉類。上面的代碼,我們創(chuàng)建了一個有關(guān)月份的枚舉類型 Month ,這里要注意的是構(gòu)造參數(shù),第一個參數(shù) Month 表示的是該枚舉類的類名,第二個 tuple 參數(shù),表示的是枚舉類的值;當(dāng)然,枚舉類通過 __members__ 遍歷它的所有成員的方法。注意的一點是 , member.value 是自動賦給成員的 int類型的常量,默認是從 1 開始的。而且 Enum 的成員均為單例(Singleton),并且不可實例化,不可更改