您好,登錄后才能下訂單哦!
如何靈活運用Python枚舉類來實現設計狀態碼信息,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
在 web
項目中,我們經常使用自定義狀態碼來告知請求方請求結果以及請求狀態;在 Python
中該如何設計自定義的狀態碼信息呢?
#!/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 : "缺少必傳參數", }
單獨利用一個字典進行狀態碼信息對照,這樣設計一旦狀態碼多了就不好對照,再使用過程中也沒那么方便,簡單試下組織一個成功的信息
data = { 'code': RETCODE.OK, 'errmsg': err_msg[RETCODE.OK] }
利用枚舉類就可以巧妙的設計狀態碼信息
#!/usr/bin/python3 # -*- coding: utf-8 -*- # @Author: Hui # @Desc: { 項目枚舉類模塊 } # @Date: 2021/09/23 23:37 from enum import Enum class StatusCodeEnum(Enum): """狀態碼枚舉類""" 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 }
咋一看雖然狀態碼信息一一對照了,也很簡潔,但使用起來還是有點麻煩,還有一點就是
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): """狀態碼枚舉類""" OK = (0, '成功') ERROR = (-1, '錯誤') SERVER_ERR = (500, '服務器異常') @property def code(self): """獲取狀態碼""" return self.value[0] @property def errmsg(self): """獲取狀態碼信息""" return self.value[1]
通過 @property
裝飾器把類型的方法當屬性使用,由于 枚舉類.屬性名 對應著不同的枚舉對象就很好的把狀態碼和信息進行了封裝。看看外部調用的結果
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的使用技巧
繼續模擬組織響應數據
data = { 'code': StatusCodeEnum.OK.code, 'errmsg': StatusCodeEnum.OK.errmsg }
這下終于可以接受了。
分享一波我平時用的狀態碼信息枚舉類,供大家參考參考。
#!/usr/bin/python3 # -*- coding: utf-8 -*- # @Author: Hui # @Desc: { 項目枚舉類模塊 } # @Date: 2021/09/23 23:37 from enum import Enum class StatusCodeEnum(Enum): """狀態碼枚舉類""" OK = (0, '成功') ERROR = (-1, '錯誤') SERVER_ERR = (500, '服務器異常') IMAGE_CODE_ERR = (4001, '圖形驗證碼錯誤') THROTTLING_ERR = (4002, '訪問過于頻繁') NECESSARY_PARAM_ERR = (4003, '缺少必傳參數') USER_ERR = (4004, '用戶名錯誤') PWD_ERR = (4005, '密碼錯誤') CPWD_ERR = (4006, '密碼不一致') MOBILE_ERR = (4007, '手機號錯誤') SMS_CODE_ERR = (4008, '短信驗證碼有誤') ALLOW_ERR = (4009, '未勾選協議') SESSION_ERR = (4010, '用戶未登錄') DB_ERR = (5000, '數據錯誤') EMAIL_ERR = (5001, '郵箱錯誤') TEL_ERR = (5002, '固定電話錯誤') NODATA_ERR = (5003, '無數據') NEW_PWD_ERR = (5004, '新密碼錯誤') OPENID_ERR = (5005, '無效的openid') PARAM_ERR = (5006, '參數錯誤') STOCK_ERR = (5007, '庫存不足') @property def code(self): """獲取狀態碼""" return self.value[0] @property def errmsg(self): """獲取狀態碼信息""" return self.value[1]
看完上述內容,你們掌握如何靈活運用Python枚舉類來實現設計狀態碼信息的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。