python 使用列舉類

2022-06-14 03:54:09 字數 2047 閱讀 8318

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

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派生出自定義類:

from enum import enum, unique

@unique

class weekday(enum):

sun = 0 # sun的value被設定為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'])

weekday.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

可見,既可以用成員名稱引用列舉常量,又可以直接根據value的值獲得列舉常量。

enum可以把一組相關常量定義在乙個class中,且class不可變,而且成員可以直接比較。

摘自:廖雪峰官方**

python列舉類定義和使用

一些具有特殊含義的類,其實例化物件的個數往往是固定的,比如用乙個類表示月份,則該類的例項物件最多有 12 個 再比如用乙個類表示季節,則該類的例項化物件最多有 4 個。針對這種特殊的類,python 3.4 中新增加了 enum 列舉類。也就是說,對於這些例項化物件個數固定的類,可以用列舉類來定義。...

使用列舉類

當我們需要定義常量時,乙個辦法是用大寫變數通過整數來定義,例如月份 jan 1 feb 2 mar 3 nov 11 dec 12好處是簡單,缺點是型別是int,並且仍然是變數。更好的方法是為這樣的列舉型別定義乙個class型別,然後,每個常量都是class的乙個唯一例項。python提供了enum...

python學習 列舉類

當我們需要定義常量時,一般的做法就是使用大寫變數通過整數來定義,例如月份 jan 1 feb 2 mar 3 apr 4 may 5.這種做法簡單,但型別仍是變數且是int類 更好的方法是為這樣的列舉型別定義乙個class型別,然後,每個常量都是class的乙個唯一例項。python提供了enum類...