由于Python官方的Enum使用值时,写数据库等时需要加.value,容易引起问题,故而重写了enum。
有一些兼容性代码,可以去掉,这里就不做优化了。
# coding: utf-8
"""
Enum对象,由于python 提供的包enum34中的Enum、IntEnum在使用过程中容易出现忘记加.value后缀等情况,非常容易出现bug,比如在落库的时候,Enum类型
的数据在做In判断的时候,都十分的容易出错,故此自己开发了一套Enum。本着使用简单的原则,防了Enum34中的概念,加之__choices__的概念,做了如下实现,自带验证功能。
使用方式与头条系统中的enum34几乎没有差别,使用方式如下。
class Example(Enum):
a = 1
b = 2
__choices__ = (
(a, u'测试样例a'),
(b, u'测试样例b'),
)
>> Example['a'] # 通过名字来找到值
Out: 1
>> Example[1] # 通过值来找到值
Out: 1
>> c = Example[3]
Out: ValueError: 3
>> c = Example['c']
Out: KeyError: c
>> a1 = Example[1]
>> print a1
Out: 1
>> a1.label
Out: u'测试样例a'
>> a1.name
Out: a
"""
from __future__ import unicode_literals
class NewInt(int):
&#