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