Python深入淺出分析enum枚舉類
枚舉類Enum
枚舉類,在企業(yè)開發(fā)中用的比較多
當我們需要定義常量時,一個辦法是用大寫的變量通過整數(shù)來定義,例如月份:
# 當項目中需要使用12個月份時
JAN = 1
FEB = 2
...
NOV = 11
DEC = 12
但是這樣的定義的類型是 int ,并且仍然是變量,并且在運算中,無法時時創(chuàng)建對應的值,當然這種指代是以更好的方式去使用變量數(shù)值。
這里存在更好的方法是為這樣的枚舉類型定義一個class類型,然后,每個常量都是class的一個唯一實例。Python提供了 Enum 類來實現(xiàn)這個功能。
優(yōu)化如下
# -*- coding: utf-8 -*-
from enum import Enum
# 枚舉中,一個名字對應一個值
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Otc', 'Nov', 'Dec'))這樣我們就獲得了 Month 類型的枚舉類,可以直接使用 Month.Jan 來引用一個常量,或者枚舉它的所有成員通過for循環(huán)進行取值,
Month.__members__是Month的內(nèi)置變量,可以打印成員標簽,
如果在這個方法調(diào)用上.items()函數(shù)所有成員都打印出來,數(shù)據(jù)類型為元組
for name, member in Month.__members__.items():
print(f'{name} => {member} , {member.value}')+

定義一個顏色常量枚舉
# -*- coding: utf-8 -*-
from enum import Enum
# 枚舉中 一個一個名字對應一個值
Month = Enum('抬頭-Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
print(Month.__members__) # 枚舉中的值自動從1開始,不會重復
# 得到三月份的值
print(Month['Mar'].value) # 3
# 根據(jù)(2)來獲得月份名字
print(Month(2).name) # Feb
# 定義一個顏色的常量枚舉
class Color(Enum): # 第二種:自定義一個枚舉類
red = 100
green = 200
blue = 300
yellow = 200 # 不允許key相同或者value,如果value重復,根據(jù)value取name只能取第一個
print(Color(200)) # Color.green不允許key相同或者value相同,如果value重復,根據(jù)value取name只能取第一個

總結(jié)
1.枚舉類不能用來實例化對象
2.訪問枚舉類中的某一項,直接使用類名訪問加上要訪問的項即可,比如 color.RED
3.枚舉類里面定義的 Key = Value,在類外部不能修改 Value 值
4.枚舉項可以用來比較,使用 ==,或者 is
5.枚舉類中的 Key 不能相同,Value 可以相同,但是 Value 相同的各項 Key 都會當做別名
6.枚舉類可以用 for 進行遍歷,members.items() 可以遍歷出含有別名的類
7.如果要枚舉類中的 key 也不能相同,需要導入 unique 對枚舉類進行裝飾
到此這篇關于Python深入淺出分析enum枚舉類的文章就介紹到這了,更多相關Python枚舉類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解
這篇文章主要介紹了Python實現(xiàn)矩陣轉(zhuǎn)置的幾種方法詳解,zip() 函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的對象,這樣做的好處是節(jié)約了不少的內(nèi)存,需要的朋友可以參考下2023-08-08
pytorch模型部署 pth轉(zhuǎn)onnx的方法
這篇文章主要介紹了pytorch模型部署 pth轉(zhuǎn)onnx的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
pandas中fillna()函數(shù)填充NaN和None的實現(xiàn)
本文主要介紹了pandas中fillna()函數(shù)填充NaN和None的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
pycharm from lxml import etree標紅問題及解決
這篇文章主要介紹了pycharm from lxml import etree標紅問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01
pygame實現(xiàn)井字棋之第二步邏輯實現(xiàn)
這篇文章主要介紹了pygame實現(xiàn)井字棋之第二步邏輯實現(xiàn),文中有非常詳細的代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05

