一文帶你了解Python中的枚舉(enum)
使用普通類直接實現(xiàn)枚舉
在Python中,枚舉和我們在對象中定義的類變量時一樣的,每一個類變量就是一個枚舉項,訪問枚舉項的方式為:類名加上類變量,像下面這樣:
class color(): YELLOW = 1 RED = 2 GREEN = 3 PINK = 4 # 訪問枚舉項 print(color.YELLOW) # 1
雖然這樣是可以解決問題的,但是并不嚴謹,也不怎么安全,比如:
1、枚舉類中,不應(yīng)該存在key相同的枚舉項(類變量)
2、不允許在類外直接修改枚舉項的值
class color(): YELLOW = 1 YELLOW = 3 # 注意這里又將YELLOW賦值為3,會覆蓋前面的1 RED = 2 GREEN = 3 PINK = 4 # 訪問枚舉項 print(color.YELLOW) # 3 # 但是可以在外部修改定義的枚舉項的值,這是不應(yīng)該發(fā)生的 color.YELLOW = 99 print(color.YELLOW) # 99
解決方案:使用enum模塊
enum模塊是系統(tǒng)內(nèi)置模塊,可以直接使用import導入,但是在導入的時候,不建議使用import enum將enum模塊中的所有數(shù)據(jù)都導入,一般使用的最多的就是enum模塊中的Enum、IntEnum、unique這幾項
# 導入枚舉類 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'> 注意事項如下:
1、枚舉類不能用來實例化對象
2、訪問枚舉類中的某一項,直接使用類名訪問加上要訪問的項即可,比如 color.YELLOW
3、枚舉類里面定義的Key = Value,在類外部不能修改Value值,也就是說下面這個做法是錯誤的
color.YELLOW = 2 # Wrong, can't reassign member
4、枚舉項可以用來比較,使用==,或者is
5、導入Enum之后,一個枚舉類中的Key和Value,Key不能相同,Value可以相,但是Value相同的各項Key都會當做別名
6、如果要枚舉類中的Value只能是整型數(shù)字,那么,可以導入IntEnum,然后繼承IntEnum即可,注意,此時,如果value為字符串的數(shù)字,也不會報錯:
from enum import IntEnum
7、如果要枚舉類中的key也不能相同,那么在導入Enum的同時,需要導入unique函數(shù)
from enum import Enum, unique
到此這篇關(guān)于一文帶你了解Python中的枚舉(enum)的文章就介紹到這了,更多相關(guān)Python中的枚舉(enum)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch中.detach()與.data的用法小結(jié)
這篇文章主要介紹了Pytorch中.detach()與.data的用法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07關(guān)于python pygame游戲進行聲音添加的技巧
這篇文章主要給大家分享的是pygame游戲進行聲音添加的方法,這文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!2021-10-10詳解python3中用HTMLTestRunner.py報ImportError: No module named ''
這篇文章主要介紹了詳解python3中用HTMLTestRunner.py報ImportError: No module named 'StringIO'如何解決,感興趣的可以了解一下2019-08-08