一文帶你了解Python中的枚舉(enum)
使用普通類直接實(shí)現(xiàn)枚舉
在Python中,枚舉和我們?cè)趯?duì)象中定義的類變量時(shí)一樣的,每一個(gè)類變量就是一個(gè)枚舉項(xiàng),訪問枚舉項(xiàng)的方式為:類名加上類變量,像下面這樣:
class color():
YELLOW = 1
RED = 2
GREEN = 3
PINK = 4
# 訪問枚舉項(xiàng)
print(color.YELLOW) # 1
雖然這樣是可以解決問題的,但是并不嚴(yán)謹(jǐn),也不怎么安全,比如:
1、枚舉類中,不應(yīng)該存在key相同的枚舉項(xiàng)(類變量)
2、不允許在類外直接修改枚舉項(xiàng)的值
class color():
YELLOW = 1
YELLOW = 3 # 注意這里又將YELLOW賦值為3,會(huì)覆蓋前面的1
RED = 2
GREEN = 3
PINK = 4
# 訪問枚舉項(xiàng)
print(color.YELLOW) # 3
# 但是可以在外部修改定義的枚舉項(xiàng)的值,這是不應(yīng)該發(fā)生的
color.YELLOW = 99
print(color.YELLOW) # 99
解決方案:使用enum模塊
enum模塊是系統(tǒng)內(nèi)置模塊,可以直接使用import導(dǎo)入,但是在導(dǎo)入的時(shí)候,不建議使用import enum將enum模塊中的所有數(shù)據(jù)都導(dǎo)入,一般使用的最多的就是enum模塊中的Enum、IntEnum、unique這幾項(xiàng)
# 導(dǎo)入枚舉類
from enum import Enum
# 繼承枚舉類
class color(Enum):
YELLOW = 1
BEOWN = 1
# 注意BROWN的值和YELLOW的值相同,這是允許的,此時(shí)的BROWN相當(dāng)于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'> 注意事項(xiàng)如下:
1、枚舉類不能用來實(shí)例化對(duì)象
2、訪問枚舉類中的某一項(xiàng),直接使用類名訪問加上要訪問的項(xiàng)即可,比如 color.YELLOW
3、枚舉類里面定義的Key = Value,在類外部不能修改Value值,也就是說下面這個(gè)做法是錯(cuò)誤的
color.YELLOW = 2 # Wrong, can't reassign member
4、枚舉項(xiàng)可以用來比較,使用==,或者is
5、導(dǎo)入Enum之后,一個(gè)枚舉類中的Key和Value,Key不能相同,Value可以相,但是Value相同的各項(xiàng)Key都會(huì)當(dāng)做別名
6、如果要枚舉類中的Value只能是整型數(shù)字,那么,可以導(dǎo)入IntEnum,然后繼承IntEnum即可,注意,此時(shí),如果value為字符串的數(shù)字,也不會(huì)報(bào)錯(cuò):
from enum import IntEnum
7、如果要枚舉類中的key也不能相同,那么在導(dǎo)入Enum的同時(shí),需要導(dǎo)入unique函數(shù)
from enum import Enum, unique
到此這篇關(guān)于一文帶你了解Python中的枚舉(enum)的文章就介紹到這了,更多相關(guān)Python中的枚舉(enum)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django靜態(tài)資源URL STATIC_ROOT的配置方法
這篇文章主要介紹了Django靜態(tài)資源URL STATIC_ROOT的配置方法,本文給出配置方法和兩種使用方法,需要的朋友可以參考下2014-11-11
pytorch載入預(yù)訓(xùn)練模型后,實(shí)現(xiàn)訓(xùn)練指定層
今天小編就為大家分享一篇pytorch載入預(yù)訓(xùn)練模型后,實(shí)現(xiàn)訓(xùn)練指定層,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
OpenCV+face++實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別解鎖功能
這篇文章主要為大家詳細(xì)介紹了OpenCV+face++實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別解鎖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
基于Pydantic封裝的通用模型在API請(qǐng)求驗(yàn)證中的應(yīng)用詳解
這篇文章主要介紹了基于Pydantic封裝的通用模型在API請(qǐng)求驗(yàn)證中的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2023-05-05
Pandas如何將Timestamp轉(zhuǎn)為datetime類型
這篇文章主要介紹了Pandas如何將Timestamp轉(zhuǎn)為datetime類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Python連接mssql數(shù)據(jù)庫編碼問題解決方法
這篇文章主要介紹了Python連接mssql數(shù)據(jù)庫編碼問題解決方法,本文方法同樣適用mysql、sqllite、mongodb等數(shù)據(jù)庫,需要的朋友可以參考下2015-01-01
Python3實(shí)現(xiàn)簡(jiǎn)單可學(xué)習(xí)的手寫體識(shí)別(實(shí)例講解)
下面小編就為大家?guī)硪黄狿ython3實(shí)現(xiàn)簡(jiǎn)單可學(xué)習(xí)的手寫體識(shí)別(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
在Python IDLE 下調(diào)用anaconda中的庫教程
這篇文章主要介紹了在Python IDLE 下調(diào)用anaconda中的庫教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03

