首頁 >後端開發 >Python教學 >python枚舉類別定義及作用(實例解析)

python枚舉類別定義及作用(實例解析)

乌拉乌拉~
乌拉乌拉~原創
2018-08-23 13:37:593729瀏覽

在以下的文章之中我們來了解一下什麼是python中的枚舉類別。了解一下什麼是python枚舉類別,以及python枚舉類別在python程式設計之中能起到什麼樣的作用。

列舉的定義

首先,定義枚舉要匯入enum模組。
枚舉定義用class關鍵字,繼承Enum類別。

注意:

定義枚舉時,成員名稱不允許重複 

預設情況下,不同的成員值允許相同。但是兩個相同值的成員,第二個成員的名稱被視為第一個成員的別名

如果枚舉中存在相同值的成員,在透過值取得枚舉成員時,只能取得到第一個成員

如果要限制定義枚舉時,不能定義相同值的成員。可以使用裝飾器@unique【要導入unique模組】

 

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

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枚舉類別的相關知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。

更多相關知識,請造訪php中文網Python教學欄位。

以上是python枚舉類別定義及作用(實例解析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn