Python 學習之枚舉類

使用

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)

上面的代碼,我們創建了一個有關月份的枚舉類型 Month ,這裏要注意的是構造參數,第一個參數 Month 表示的是該枚舉類的類名,第二個 tuple 參數,表示的是枚舉類的值;當然,枚舉類通過 members 遍歷它的所有成員的方法。

注意的一點是 , member.value 是自動賦給成員的 int 類型的常量,默認是從 1 開始的。

而且 Enum 的成員均爲單例(Singleton),並且不可實例化,不可更改。

自定義枚舉類

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' set '

__author__ = 'Kevin Gong'

from enum import Enum, unique

@unique
class Weekday(Enum):
    Sun = 0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6

day1 = Weekday.Mon

print('day1 =', day1)
print('Weekday.Tue =', Weekday.Tue)
print('Weekday[\'Tue\'] =', Weekday['Tue'])
print('Weekday.Tue.value =', Weekday.Tue.value)
print('day1 == Weekday.Mon ?', day1 == Weekday.Mon)
print('day1 == Weekday.Tue ?', day1 == Weekday.Tue)
print('day1 == Weekday(1) ?', day1 == Weekday(1))

for name, member in Weekday.__members__.items():
    print(name, '=>', member)

結果:

day1 = Weekday.Mon
Weekday.Tue = Weekday.Tue
Weekday['Tue'] = Weekday.Tue
Weekday.Tue.value = 2
day1 == Weekday.Mon ? True
day1 == Weekday.Tue ? False
day1 == Weekday(1) ? True
Sun => Weekday.Sun
Mon => Weekday.Mon
Tue => Weekday.Tue
Wed => Weekday.Wed
Thu => Weekday.Thu
Fri => Weekday.Fri
Sat => Weekday.Sat

@unique 裝飾器可以幫助我們檢查保證沒有重複值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章