如果是新版Python用户(Python 3.4 with PEP 435):
1 2 |
from enum import Enum Animal = Enum( 'Animal' , 'ant bee cat dog' ) |
or
1 2 3 4 5 |
class Animals(Enum): ant = 1 bee = 2 cat = 3 dog = 4 |
旧版Python用户可以充分发挥动态语言的优越性来构造枚举,有简单的:
1 2 3 4 5 |
def enum( * * enums): return type ( 'Enum' , (), enums) Numbers = enum(ONE = 1 , TWO = 2 , THREE = 'three' ) # Numbers.ONE == 1, Numbers.TWO == 2 and Numbers.THREE == 'three' |
有复杂的:
1 2 3 4 5 6 |
def enum( * sequential, * * named): enums = dict ( zip (sequential, range ( len (sequential))), * * named) return type ( 'Enum' , (), enums) Numbers = enum( 'ZERO' , 'ONE' , 'TWO' ) # Numbers.ZERO == 0 and Numbers.ONE == 1 |
有带值到名称映射的:
1 2 3 4 5 6 7 |
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' |
有用set实现的:
1 2 3 4 5 6 7 8 |
class Enum( set ):
|