Python 枚舉類

Python v3.8.5

如果想將一個(gè)類定義為枚舉類,只需要令其繼承自enum 模塊(內(nèi)置)中的 Enum 類即可。枚舉類具有以下特點(diǎn):

  1. 枚舉類不支持實(shí)例化;
  2. 成員的值不能在類的外部做任何修改,每個(gè)成員都有name,value兩個(gè)屬性,其中name為該枚舉值的名稱,value為該枚舉值的內(nèi)容;
  3. 定義枚舉時(shí),成員名稱不允許重復(fù),但在默認(rèn)情況下,不同的成員值允許相同,兩個(gè)相同值的成員,第二個(gè)成員的名稱將會(huì)被視作第一個(gè)成員的別名,若要限制不能定義相同值的成員。可以使用裝飾器@unique;
  4. 枚舉支持迭代器,可以遍歷枚舉成員;如果枚舉有值重復(fù)的成員,循環(huán)遍歷枚舉時(shí)只獲取值重復(fù)成員的第一個(gè)成員,若想把值重復(fù)的成員也遍歷出來(lái),要用枚舉的一個(gè)特殊屬性:__members__

在自己的web項(xiàng)目中,接口響應(yīng)狀態(tài)碼枚舉類部分代碼如下:

from enum import Enum, unique
from typing import Optional


@unique
class APIStatusCode(Enum):
    """接口響應(yīng)狀態(tài)碼枚舉類
    """
    SUCCESS = {1: "Success"}
    UNKNOWN_ERROR = {-1: "Unknown Error"}
    PARAMETER_ERROR = {10232: "Parameter Error"}

    @property
    def code(self):
        """根據(jù)枚舉值取狀態(tài)碼 -> `code` """
        # self is the member here
        return list(self.value.keys())[0]

    @property
    def message(self):
        """根據(jù)枚舉值取狀態(tài)碼說(shuō)明 -> `message` """
        return list(self.value.values())[0]

    @classmethod
    def message_by_code(cls, code) -> Optional[str]:
        """根據(jù)狀態(tài)碼獲取狀態(tài)碼說(shuō)明 """
        for name, member in cls.__members__.items():
            if code in member.value.keys():
                message = cls[name].message
                return message
        return None

    def __repr__(self):
        return "<%s.%s, %s>" % (self.__class__.__name__, self.name, self.value)

    def __str__(self):
        return "%s.%s" % (self.__class__.__name__, self.name)


if __name__ == "__main__":
    # 獲取狀態(tài)碼
    print(APIStatusCode.SUCCESS.code)
    # 獲取狀態(tài)碼說(shuō)明
    print(APIStatusCode.SUCCESS.message)
    # 根據(jù)狀態(tài)碼獲取對(duì)應(yīng)的說(shuō)明
    print(APIStatusCode.message_by_code(1))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容