當我們需要定義常量時,乙個辦法是用大寫變數通過整數來定義,例如月份:
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的值獲得列舉常量。 Python類學習(九 列舉類Enum
目錄 1.兩種方式定義列舉類 1 直接使用enum 函式列出多個列舉值來建立列舉類 2 通過繼承enum類定義列舉類 2.列舉類定義建構函式 什麼是列舉類?物件有限且固定的類 比如季節類,只包括春夏秋冬四個物件 from enum import enum 定義season列舉類 season enu...
Kotlin筆記 八 八 列舉類
kotlin使用enum class關鍵字定義列舉類,可以實現乙個或多個介面 列舉類的所有例項必須在 第一行顯式列出 例項間用 隔開,以 結束 列舉類可以有自己的 屬性 方法 構造器 構造器只能使用private修飾符,省略則預設使用private 列舉類應該被設為不可變類,屬性不應該允許改變,推薦...
Swift學習筆記 10 列舉
1.定義語法 enum someenumeration2.使用 enum compasspoint var directiontohead compasspoint.west directiontohead south switch directiontohead 注 1.變數乙個次賦值為列舉型別以...