【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.基类中封装常用的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值