靈活運用Python 枚舉類來實現(xiàn)設計狀態(tài)碼信息
引言
在 web 項目中,我們經(jīng)常使用自定義狀態(tài)碼來告知請求方請求結果以及請求狀態(tài);在 Python 中該如何設計自定義的狀態(tài)碼信息呢?
普通類加字典設計狀態(tài)碼
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { 項目響應碼模塊 }
# @Date: 2021/09/22 23:37
class RETCODE:
OK = "0"
ERROR = "-1"
IMAGECODEERR = "4001"
THROTTLINGERR = "4002"
NECESSARYPARAMERR = "4003"
err_msg = {
RETCODE.OK : "成功",
RETCODE.IMAGECODEERR : "圖形驗證碼錯誤",
RETCODE.THROTTLINGERR : "訪問過于頻繁",
RETCODE.NECESSARYPARAMERR : "缺少必傳參數(shù)",
}
單獨利用一個字典進行狀態(tài)碼信息對照,這樣設計一旦狀態(tài)碼多了就不好對照,再使用過程中也沒那么方便,簡單試下組織一個成功的信息
data = {
'code': RETCODE.OK,
'errmsg': err_msg[RETCODE.OK]
}
巧用枚舉類設計狀態(tài)碼信息
利用枚舉類就可以巧妙的設計狀態(tài)碼信息
枚舉類的定義
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { 項目枚舉類模塊 }
# @Date: 2021/09/23 23:37
from enum import Enum
class StatusCodeEnum(Enum):
"""狀態(tài)碼枚舉類"""
OK = (0, '成功')
ERROR = (-1, '錯誤')
SERVER_ERR = (500, '服務器異常')
普通的類繼承 enum 模塊中的 Enum 類就變成了枚舉類。
枚舉類的使用
在 ipython 中測試使用下
In [21]: ok = StatusCodeEnum.OK In [22]: type(ok) Out[22]: <enum 'StatusCodeEnum'> In [23]: error = StatusCodeEnum.ERROR In [24]: type(error) Out[24]: <enum 'StatusCodeEnum'> In [26]: ok.name Out[26]: 'OK' In [27]: ok.value Out[27]: (0, '成功') In [28]: error.name Out[28]: 'ERROR' In [29]: error.value Out[29]: (-1, '錯誤')
枚舉類中的每一個屬性都返回一個枚舉對象,其中枚舉對象有兩個重要的屬性 name, value
- name 枚舉對象在枚舉類中的屬性名
- value 則是枚舉對象在枚舉類中對應屬性名的值
# StatusCodeEnum.OK -> # name value # 'OK' (200, '成功') # StatusCodeEnum.ERROR -> # name value # 'ERROR' (-1, '錯誤')
用枚舉類組組織一個成功的響應信息
code = StatusCodeEnum.OK.value[0]
errmsg = StatusCodeEnum.OK.value[1]
data = {
'code': code,
'errmsg': errmsg
}
咋一看雖然狀態(tài)碼信息一一對照了,也很簡潔,但使用起來還是有點麻煩,還有一點就是
StatusCodeEnum.OK.value[0] 這樣的語法不能立馬見名知義。因此還需對枚舉類進行封裝
封裝枚舉類
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { 項目枚舉類模塊 }
# @Date: 2021/09/23 23:37
from enum import Enum
class StatusCodeEnum(Enum):
"""狀態(tài)碼枚舉類"""
OK = (0, '成功')
ERROR = (-1, '錯誤')
SERVER_ERR = (500, '服務器異常')
@property
def code(self):
"""獲取狀態(tài)碼"""
return self.value[0]
@property
def errmsg(self):
"""獲取狀態(tài)碼信息"""
return self.value[1]
通過 @property 裝飾器把類型的方法當屬性使用,由于 枚舉類.屬性名 對應著不同的枚舉對象就很好的把狀態(tài)碼和信息進行了封裝??纯赐獠空{(diào)用的結果
In [32]: StatusCodeEnum.OK.code Out[32]: 0 In [33]: StatusCodeEnum.OK.errmsg Out[33]: '成功' In [34]: StatusCodeEnum.ERROR.code Out[34]: -1 In [35]: StatusCodeEnum.ERROR.errmsg Out[35]: '錯誤'
具體 @property 裝飾器的使用詳解,可以移步到 Python中property的使用技巧
繼續(xù)模擬組織響應數(shù)據(jù)
data = {
'code': StatusCodeEnum.OK.code,
'errmsg': StatusCodeEnum.OK.errmsg
}
這下終于可以接受了。
狀態(tài)碼信息枚舉類
分享一波我平時用的狀態(tài)碼信息枚舉類,供大家參考參考。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author: Hui
# @Desc: { 項目枚舉類模塊 }
# @Date: 2021/09/23 23:37
from enum import Enum
class StatusCodeEnum(Enum):
"""狀態(tài)碼枚舉類"""
OK = (0, '成功')
ERROR = (-1, '錯誤')
SERVER_ERR = (500, '服務器異常')
IMAGE_CODE_ERR = (4001, '圖形驗證碼錯誤')
THROTTLING_ERR = (4002, '訪問過于頻繁')
NECESSARY_PARAM_ERR = (4003, '缺少必傳參數(shù)')
USER_ERR = (4004, '用戶名錯誤')
PWD_ERR = (4005, '密碼錯誤')
CPWD_ERR = (4006, '密碼不一致')
MOBILE_ERR = (4007, '手機號錯誤')
SMS_CODE_ERR = (4008, '短信驗證碼有誤')
ALLOW_ERR = (4009, '未勾選協(xié)議')
SESSION_ERR = (4010, '用戶未登錄')
DB_ERR = (5000, '數(shù)據(jù)錯誤')
EMAIL_ERR = (5001, '郵箱錯誤')
TEL_ERR = (5002, '固定電話錯誤')
NODATA_ERR = (5003, '無數(shù)據(jù)')
NEW_PWD_ERR = (5004, '新密碼錯誤')
OPENID_ERR = (5005, '無效的openid')
PARAM_ERR = (5006, '參數(shù)錯誤')
STOCK_ERR = (5007, '庫存不足')
@property
def code(self):
"""獲取狀態(tài)碼"""
return self.value[0]
@property
def errmsg(self):
"""獲取狀態(tài)碼信息"""
return self.value[1]
尾語
✍ 用 Code 譜寫世界,讓生活更有趣。❤️
✍ 萬水千山總是情,點贊再走行不行。❤️
✍ 碼字不易,還望各位大俠多多支持。❤️
到此這篇關于靈活運用Python 枚舉類來實現(xiàn)設計狀態(tài)碼信息的文章就介紹到這了,更多相關Python 枚舉類 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python?pickle?二進制序列化和反序列化及數(shù)據(jù)持久化詳解
這篇文章主要介紹了Python?pickle?二進制序列化和反序列化?-?數(shù)據(jù)持久化,模塊?pickle?實現(xiàn)了對一個?Python?對象結構的二進制序列化和反序列化,本文介紹了Pickle的基本用法,需要的朋友可以參考下2024-01-01
Python打包文件執(zhí)行報錯:ModuleNotFoundError: No module 
這篇文章給大家介紹了Python打包文件執(zhí)行報錯:ModuleNotFoundError: No module named ‘pymssql‘的解決方法,如果有遇到相同問題的朋友可以參考閱讀一下本文2023-10-10
Python實現(xiàn)對相同數(shù)據(jù)分箱的小技巧分享
這篇文章主要給大家介紹了關于Python實現(xiàn)對相同數(shù)據(jù)分箱的小技巧,文中通過實例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友可以參考下2022-01-01
使用pandas讀取表格數(shù)據(jù)并進行單行數(shù)據(jù)拼接的詳細教程
這篇文章主要介紹了使用pandas讀取表格數(shù)據(jù)并進行單行數(shù)據(jù)拼接的詳細教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03

