Python3(八) 枚舉詳解

一.枚舉實際上是一個類

建議標識名字用大寫數據庫

1.枚舉類:spa

from enum import Enum
 
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
 
print(VIP.YELLOW)
 
#VIP.YELLOW    #關注的是它的標籤不是數字

2 枚舉和普通類相比的優點code

  三種其餘的普通方法表示枚舉:blog

(1)

yellow = 1

green = 22)字典的表示方式

{'yellow':1,'green':2}    

(3)類的表示方式

class TypeDiamond():

    yellow = 1

    green = 2

這些方式,它們都是可變的,能夠在代碼中輕易的更改值,且沒有防止相同標籤的功能。繼承

 

3.枚舉的特色:it

from enum import Enum
 
class VIP(Enum):
 
    YELLOW = 1
 
   #YELLOW= 2   #不可重複,報錯
 
    BLACK = 3
 
    RED = 4
 
print(VIP.YELLOW)
 
#VIP.YELLOW = 6    #不可更改,報錯

二.枚舉類型、枚舉名稱與枚舉值

1.獲取枚舉類型下某一數值:class

from enum import Enum
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
    
 
print(VIP.YELLOW.value)
 
print(VIP.YELLOW.name)
 
print(VIP.YELLOW)
 
print(VIP['YELLOW'])
 
#1        #枚舉值
 
#YELLOW    #<class 'str'> 獲取標籤名
 
#VIP.YELLOW    #<enum 'VIP'>    枚舉類型
 
#VIP.YELLOW    

2.枚舉是能夠遍歷的:import

from enum import Enum
 
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
for v in VIP :
 
    print(v)
 
#VIP.YELLOW
VIP.GREEN
VIP.BLACK
VIP.RED

三. 枚舉的比較運算 

1.兩個枚舉之間能夠使用等值比較(==),枚舉與數值比較的判斷結果不對。兩個枚舉之間不能進行大小比較。循環

2.支持is操做:遍歷

result = VIP.GREEN is VIP.GREEN
 
#True

3.兩個大類之間也能夠進行等值比較,不過結果是False:

from enum import Enum
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
class VIP1(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
print(VIP.GREEN ==VIP1.GREEN)
 
#False

四.枚舉注意事項

1.枚舉的數值能夠相同,在這種狀況下,將第二種枚舉類型當作別名。遍歷時不會打印別名:

class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 1    #別名,不會報錯
 
    BLACK = 3
 
    RED = 4
 
print(VIP.GREEN)
 
#VIP.YELLOW

2.把別名加入遍歷循環:

(1)
for v in VIP.__members__.items() :
 
    print(v)
 
#('YELLOW', <VIP.YELLOW: 1>)
 
#('GREEN', <VIP.GREEN: 1>)
 
#('BLACK', <VIP.BLACK: 3>)
 
#('RED', <VIP.RED: 4>)
 
(2)
 
或者遍歷__members__:
 
for v in VIP.__members__:
 
    print(v)
 
#YELLOW
 
#GREEN
 
#BLACK
 
#RED

五.枚舉轉換

1.在數據庫裏通常存儲數值或者標籤名字來表明枚舉類型,推薦存儲數值,數字佔用的空間更小。可是不建議在代碼種用數值表明枚舉,可讀性不強。

2.如何將數字轉換成枚舉類型: 

from enum import Enum
 
a = 1
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
print(VIP(a))    #轉換枚舉類型
 
#VIP.YELLOW

六.枚舉小結

1.要求每一個枚舉類型都是數字的時候繼承IntEnum:

from enum import IntEnum
 
class VIP(IntEnum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4

2.限制不一樣的枚舉類型不能取相同的值:

from enum import Enum
 
from enum import IntEnum,unique
 
@unique    #裝飾器
 
class VIP(IntEnum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4

枚舉類型不能實例化,屬於單例模式

相關文章
相關標籤/搜索