1. 程式人生 > >Python枚舉類

Python枚舉類

參考 imp for mem item 屬性 它的 back -m

本篇主要介紹Python中枚舉類的用法,更多內容請參考:Python學習指南

當我們需要定義常量時,一個辦法就是用大寫變量通過整數來定義,例如月份:

JAN = 1
FEB = 2
MAR = 3
···
NOV = 11
DEC = 12

好處就是簡單,確定是類型是int,並且仍然是變量。

更好的辦法是為這樣的枚舉類型定義一個class類型,然後,每個常量都是class的一個唯一實例。Python提供了Enum來來實現這個功能:

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb'
, 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

這樣我們就獲得了Month類型的枚舉值,可以直接使用Month.Jan來引用一個常量,或者枚舉它的所有成員:

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

value屬性則是自動賦給成員int常量,默認從1開始計數。

如果需要更精確地控制枚舉類型,可以從Enum派生出自定義類:

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

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

訪問這些枚舉類型可以有若幹種方法:

>>> day1 = Weekday.Mon
>>> print(day1)
Weekday.Mon
>>>
print(Weekday.Tue) Weekday.Tue >>> print(Weekday['Tue'].name) Tue >>> print(Weekday.Tue.value) 2 >>> print(day1 == Weekday.Mon) True >>> print(day1 == Weekday.Tue) False >>> print(Weekday(1)) Weekday.Mon >>> print(day1 == Weekday(1)) True >>> Weekday(7) Traceback (most recent call last): ... ValueError: 7 is not a valid Weekday >>> for name, member in Weekday.__members__.items(): ... print(name, '=>', member) ... Sun => Weekday.Sun Mon => Weekday.Mon Tue => Weekday.Tue Wed => Weekday.Wed Thu => Weekday.Thu Fri => Weekday.Fri Sat => Weekday.Sat

Python枚舉類