枚舉類別的使用

實際開發中,我們離不開定義常數,當我們需要定義常數時,其中一個辦法是用大寫變數透過整數來定義,例如月份:

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)

輸出的結果如下:

a41b1b020149ba50432eae7d4913fa0.png

可見,我們可以直接使用Enum 來定義一個枚舉類。上面的程式碼,我們創建了一個有關月份的枚舉類型Month ,這裡要注意的是構造參數,第一個參數Month 表示的是該枚舉類的類名,第二個tuple 參數,表示的是枚舉類別的值;當然,枚舉類別透過__members__ 遍歷它的所有成員的方法。注意的一點是 , member.value 是自動賦給成員的 int型別的常數,預設是從 1 開始的。而 Enum 的成員皆為單例(Singleton),且不可實例化,不可變更

繼續學習