中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何靈活運用Python枚舉類來實現設計狀態碼信息

發布時間:2021-09-30 09:10:21 來源:億速云 閱讀:146 作者:柒染 欄目:開發技術

如何靈活運用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枚舉類來實現設計狀態碼信息的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁武县| 洛隆县| 郓城县| 阜新| 北京市| 玛曲县| 新郑市| 滕州市| 高清| 柳州市| 桦川县| 教育| 青冈县| 独山县| 昌平区| 延寿县| 休宁县| 新野县| 夹江县| 四川省| 开远市| 衡阳县| 信宜市| 墨脱县| 佛学| 霍林郭勒市| 安化县| 阿瓦提县| 上高县| 诸城市| 渝中区| 图木舒克市| 舟曲县| 响水县| 常熟市| 东山县| 嘉峪关市| 长春市| 陆河县| 交口县| 准格尔旗|