標籤:結構 value 通過 情況 引入 控制 port 利用 不能
在Python中想要實現枚舉功能的方式比較多,可以通過字典這一資料結構,利用鍵與值的對應關係,可以實現枚舉的功能。
my_Enum={‘red‘:1,‘yellow‘:2,‘blue‘:3}print(my_Enum[‘red‘])
也可以使用類來建立一個屬性名稱與屬性值之間的對應關係來實現枚舉的功能,然後用.操作符來讀取
class my_Enum{ red=1, yellow=2, blue=3 }my_Enum.red
但是用以上兩種方式出現的問題也是很明顯的:
1.枚舉值可以修改
2.用類定義的話,這些枚舉功能的類可以被執行個體化
3.枚舉值是否重複無法檢查
在Python3.4引入了enum模組,這個模組就是為瞭解決上面所說到的問題的,使用的時候首先引入模組:
import enum
enum裡面提供了Enum和IntEnum等類,可以用來繼承。
當然,這些類就被限制了,
1.不能被繼承
2.定義之後不能在類內修改
3.枚舉名稱不能重複。如果有值重複的情況,那麼後者的名稱將會是前者的別名,其實是一個對象。
要控制枚舉值不能重複,可以在枚舉類之前加上@unique
對枚舉類的操作:
from enum import IntEnumclass my_Enum(IntEnum): red=1, green=2, blue=3, what=3, yellow=9#按名字取出枚舉的值print(my_Enum[‘red‘])print(my_Enum[‘what‘])#枚舉的值返回枚舉名字print(my_Enum(9))print(my_Enum[‘red‘].name)print(my_Enum[‘red‘].value)#可以用for in迭代for i in my_Enum: print(i.name,‘->‘,i.value)
運行結果:
my_Enum.redmy_Enum.bluemy_Enum.yellowred1red -> 1green -> 2blue -> 3yellow -> 9
Python中的枚舉