枚舉的結構
from enum import Enum class Color(Enum): RED = 1 YELLOW = 2 BLUE = 3 print(Color.RED) # Color.RED
- 從enum導入Enum,並讓自定義的枚舉類繼承Enum
- 枚舉類內的標簽最好用大寫字母來表示常量
枚舉類與普通類的區別
- 標簽值不可被修改
- 一個標簽只能對應一個值,但多個標簽可以對應相同的值(別名)
以下兩種情況都會報錯:
from enum import Enum class Color(Enum): RED = 1 YELLOW = 2 BLUE = 3 Color.RED = 2
from enum import Enum class Color(Enum): RED = 1 RED = 2 YELLOW = 2 BLUE = 3
枚舉類型、枚舉名稱、枚舉值之間的區別
from enum import Enum class Color(Enum): RED = 1 YELLOW = 2 BLUE = 3 print(Color.RED) print(type(Color.RED)) # Color.RED # <enum 'Color'> print(Color.RED.name) # 獲取枚舉類型的名稱 print(type(Color.RED.name)) # RED # <class 'str'> print(Color.RED.value) # 獲取枚舉類型的真實值 print(type(Color.RED.value)) # 1 # <class 'int'>
枚舉類型可以用讀取字典的方式來讀取,並且可以遍歷:
from enum import Enum class Color(Enum): RED = 1 YELLOW = 1 BLUE = 3 print(Color['RED']) # 訪問 for e in Color: # 遍歷 print(e) # 當多個標簽對應相同值時,第一個定義的為主名,其他的為別名 # 直接遍歷無法輸出別名,可以用__members__來全部輸出 for e in Color.__members__: print(e)
枚舉類型間的比較
枚舉類型可以做等值比較和身份比較,但是不能做大小比較:
from enum import Enum class Color(Enum): RED = 1 YELLOW = 1 BLUE = 3 print(Color.RED == Color.YELLOW) # True print(Color.RED is Color.YELLOW) # True
將數字轉換為枚舉類型
from enum import Enum class Color(Enum): RED = 1 YELLOW = 1 BLUE = 3 e = Color(1) # 根據數字來找到對應的枚舉類型 print(e) # Color.RED
其他
規定枚舉類型對應值只能是數字:
from enum import IntEnum # 使用IntEnum class Color(IntEnum): RED = 1 YELLOW = 2 BLUE = 3
規定不可取別名(每個標簽必須對應不同值):
from enum import Enum,unique # 使用unique裝飾器 @ unique class Color(Enum): RED = 1 YELLOW = 2 BLUE = 3