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