【Python】枚舉變量的使用

項目中需要大量用到枚舉變量,但我們希望可以根據指定的字符串,創建對應的枚舉變量,並將枚舉值作爲存儲值

場景:客戶端發送的消息包帶有"android"字符串,用以說明當前移動端系統類型,服務器端需要爲其創建對應的枚舉變量,最終將枚舉值(0或1)存入數據庫中

定義一個抽象的枚舉類作爲父類:

class BaseTupleEnum(Enum):
    def __init__(self, desc, val):
        self.desc = desc
        self.val = val

    def get_desc(self):
        return self.desc

    def get_value(self):
        return self.val

    @classmethod
    def get_values(cls):
        values = []
        for attr in cls:
            values.append(attr.value[1])

        return values

    @classmethod
    def get_descs(cls):
        descs = []
        for attr in cls:
            descs.append(attr.value[0])

        return descs

父類的init方法可以看出,每個BaseTupleEnum枚舉類型,包含desc和val兩個屬性,desc爲我們要描述的字符串,val爲該枚舉變量對應的枚舉值

定義具體的枚舉類型:

class OsTypeEnum(BaseTupleEnum):
    ANDROID = ("android", 0)
    IOS = ("ios", 1)

測試用例:

class TestBaseEnum(unittest.TestCase):
    def test_values(self):
        expected =frozenset((OsTypeEnum.IOS.get_value(),OsTypeEnum.ANDROID.get_value()))
        actual = frozenset(OsTypeEnum.values())

        print (OsTypeEnum.values())
        self.assertSetEqual(expected, actual)

    def test_value_in(self):
        value = 1
        self.assertTrue(value in OsTypeEnum.values())

    def test_value_equal(self):
        value = 1
        self.assertTrue(value == OsTypeEnum.IOS.get_value())

if __name__ == '__main__':
    test = TestBaseEnum()
    test.test_values()
    test.test_value_in()
    test.test_value_equal()
    print ("<----------------->")
    print (OsTypeEnum.IOS.get_desc())
    print (OsTypeEnum.IOS.get_value())

特殊枚舉類型小結:

1.定義適用的枚舉類型基類

2.繼承基類,定義具體的子類

3.基類中封裝常用的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章