在Python中,枚舉和咱們在對象中定義的類變量時同樣的,每個類變量就是一個枚舉項,訪問枚舉項的方式爲:類名加上類變量,像下面這樣:python
class color(): YELLOW = 1 RED = 2 GREEN = 3 PINK = 4 # 訪問枚舉項 print(color.YELLOW) # 1
雖然這樣是能夠解決問題的,可是並不嚴謹,也不怎麼安全,好比:安全
一、枚舉類中,不該該存在key相同的枚舉項(類變量)函數
二、不容許在類外直接修改枚舉項的值對象
class color(): YELLOW = 1 YELLOW = 3 # 注意這裏又將YELLOW賦值爲3,會覆蓋前面的1 RED = 2 GREEN = 3 PINK = 4 # 訪問枚舉項 print(color.YELLOW) # 3 # 可是能夠在外部修改定義的枚舉項的值,這是不該該發生的 color.YELLOW = 99 print(color.YELLOW) # 99
enum模塊是系統內置模塊,能夠直接使用import導入,可是在導入的時候,不建議使用import enum將enum模塊中的全部數據都導入,通常使用的最多的就是enum模塊中的Enum、IntEnum、unique這幾項blog
# 導入枚舉類 from enum import Enum # 繼承枚舉類 class color(Enum): YELLOW = 1 BEOWN = 1 # 注意BROWN的值和YELLOW的值相同,這是容許的,此時的BROWN至關於YELLOW的別名 RED = 2 GREEN = 3 PINK = 4 class color2(Enum): YELLOW = 1 RED = 2 GREEN = 3 PINK = 4
使用本身定義的枚舉類:繼承
print(color.YELLOW) # color.YELLOW print(type(color.YELLOW)) # <enum 'color'> print(color.YELLOW.value) # 1 print(type(color.YELLOW.value)) # <class 'int'> print(color.YELLOW == 1) # False print(color.YELLOW.value == 1) # True print(color.YELLOW == color.YELLOW) # True print(color.YELLOW == color2.YELLOW) # False print(color.YELLOW is color2.YELLOW) # False print(color.YELLOW is color.YELLOW) # True print(color(1)) # color.YELLOW print(type(color(1))) # <enum 'color'>
注意事項以下:字符串
一、枚舉類不能用來實例化對象class
二、訪問枚舉類中的某一項,直接使用類名訪問加上要訪問的項便可,好比 color.YELLOWimport
三、枚舉類裏面定義的Key = Value,在類外部不能修改Value值,也就是說下面這個作法是錯誤的變量
color.YELLOW = 2 # Wrong, can't reassign member
四、枚舉項能夠用來比較,使用==,或者is
五、導入Enum以後,一個枚舉類中的Key和Value,Key不能相同,Value能夠相,可是Value相同的各項Key都會當作別名,
六、若是要枚舉類中的Value只能是整型數字,那麼,能夠導入IntEnum,而後繼承IntEnum便可,注意,此時,若是value爲字符串的數字,也不會報錯:
from enum import IntEnum
七、若是要枚舉類中的key也不能相同,那麼在導入Enum的同時,須要導入unique函數
from enum import Enum, unique