开发中经常会用到枚举,比如定义一些状态码,那该如何实现呢?
最先想到的应该是字典:
status = {
"OK": (0, "成功"),
"ERROR": (-1, "失败")
}
使用时这么取用:
data = {
"code": status.get("OK")[0],
"msg": status.get("OK")[1]
}
这样实现,用起来不方便,写起来也不够优雅。 我们可以用枚举类(Enum)来更好的实现它。
from enum import Enum
class StatusEnum(Enum):
OK = (0, "成功")
ERROR = (-1, "失败")
取值是这样的:
>>> StatusEnum.OK
<StatusEnum.OK: (0, '成功')>
>>> StatusEnum.OK.name
'OK'
>>> StatusEnum.OK.value
(0, '成功')
现在想分别取到状态码的code和msg还是比较麻烦,我们可以把枚举类改造下。
from enum import Enum
class BaseEnum(Enum):
@property
def code(self):
return self.value[0]
@property
def msg(self):
return self.value[1]
class StatusEnum(BaseEnum):
OK = (0, "成功")
ERROR = (-1, "失败")
这个时候我们就可以这么取用:
data = {
"code": StatusEnum.OK.code,
"msg": StatusEnum.OK.msg
}
就很Pythonic~~~