溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中的枚舉怎么實現(xiàn)

發(fā)布時間:2023-04-10 10:50:46 來源:億速云 閱讀:93 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了Python中的枚舉怎么實現(xiàn)的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python中的枚舉怎么實現(xiàn)文章都會有所收獲,下面我們一起來看看吧。

使用普通類直接實現(xiàn)枚舉

在Python中,枚舉和我們在對象中定義的類變量時一樣的,每一個類變量就是一個枚舉項,訪問枚舉項的方式為:類名加上類變量,像下面這樣:

class color():
    YELLOW  = 1
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
# 訪問枚舉項
print(color.YELLOW) # 1

雖然這樣是可以解決問題的,但是并不嚴(yán)謹(jǐn),也不怎么安全,比如:

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導(dǎo)入,但是在導(dǎo)入的時候,不建議使用import enum將enum模塊中的所有數(shù)據(jù)都導(dǎo)入,一般使用的最多的就是enum模塊中的Enum、IntEnum、unique這幾項

# 導(dǎo)入枚舉類
from enum import Enum
 
# 繼承枚舉類
class color(Enum):
    YELLOW  = 1
    BEOWN   = 1 
    # 注意BROWN的值和YELLOW的值相同,這是允許的,此時的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'>
  注意事項如下:

1、枚舉類不能用來實例化對象

2、訪問枚舉類中的某一項,直接使用類名訪問加上要訪問的項即可,比如 color.YELLOW

3、枚舉類里面定義的Key = Value,在類外部不能修改Value值,也就是說下面這個做法是錯誤的

color.YELLOW = 2  # Wrong, can't reassign member

4、枚舉項可以用來比較,使用==,或者is  

5、導(dǎo)入Enum之后,一個枚舉類中的Key和Value,Key不能相同,Value可以相,但是Value相同的各項Key都會當(dāng)做別名

6、如果要枚舉類中的Value只能是整型數(shù)字,那么,可以導(dǎo)入IntEnum,然后繼承IntEnum即可,注意,此時,如果value為字符串的數(shù)字,也不會報錯:

from enum import IntEnum

7、如果要枚舉類中的key也不能相同,那么在導(dǎo)入Enum的同時,需要導(dǎo)入unique函數(shù)

from enum import Enum, unique

關(guān)于“Python中的枚舉怎么實現(xiàn)”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Python中的枚舉怎么實現(xiàn)”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI