PEP435 标准已经把枚举添加到 Python3.4 版本,在 PyPi 中也可以向后支持,通过:
pip install enum34
如果下载 enum
没有数字将会是另一个版本
from enum import Enum
animal = Enum("Animal", "ant bee cat dog")
等价于:
class Animals(Enum):
ant = 1
bee = 2
cat = 3
dog = 4
在更早以前,有这些方法:
def enum(**enums):
return type('Enum', (), enums)
>>> Numbers = enum(ONE=1, TWO=2, THREE='three')
>>> Numbers.ONE
1
>>> Numbers.TWO
2
>>> Numbers.THREE
'three'
或者
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
return type('Enum', (), enums)
>>> Numbers = enum('ZERO', 'ONE', 'TWO')
>>> Numbers.ZERO
0
>>> Numbers.ONE
1
把值转换为名字:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
reverse = dict((value, key) for key, value in enums.iteritems())
enums['reverse_mapping'] = reverse
return type('Enum', (), enums)
>>> Numbers.reverse_mapping['three']
'THREE'
这样会覆盖名字下的所有东西,但是对于枚举的输出很有用。如果转换的值不存在就会抛出 KeyError 异常