標籤:
#出處:http://www.cnblogs.com/codingmylife/archive/2013/05/31/3110656.html
"""
從C系語言過來用Python,好不容易適應了寫代碼不打花括弧,突然有一天發現它居然木有枚舉……於是stackoverflow了一把,發現神人的枚舉(enum)實現到處都是,於是漢化總結過來。
如果是新版Python使用者(Python 3.4 with PEP 435):
"""
#py3.x版本如下
# from enum import Enum
# enum1=Enum(‘a1‘,‘a3‘)
#或者
# class Enum1(Enum):
# a=1
# b=2
# c=3
# d=4
#以上例子是python3.x版本的才可以使用,而python2.x版的朋友,使用如下方式
def enum(**e):
return type(‘Enum‘,(),e)
num=enum(num1=1,num2=2,num3=3)
print num.mro()
print num.__dict__
#複雜的
def e1(*a,**k):
e2=dict(zip(a,range(len(a))),**k)
return type(‘Enum‘,(),e2)
Numbers = e1(‘ZERO‘, ‘ONE‘, ‘TWO‘)
print Numbers()
#有帶值到名稱映射的
def e2(*a,**k):
e1=dict(zip(a,range(len(a))),**k)
reverse=dict((v,k)for k ,v in e1.iteritems())
e1[‘reverse_mapping‘]=reverse
return type(‘Enum‘,(),e1)
#有用set實現的
class E1(set):
def __getattr__(self, name):
if name in self:
return name
raise AttributeError
Animals = E1(["DOG", "CAT", "HORSE"])
print Animals.DOG
#有用range實現的
a,b,c=range(3)
#or
class Abc:
(a,b,c)=range(3)
print Abc.b
#有用tuple實現的
class Ty(tuple):
__getattr__=tuple.index
Ty=Ty([‘dog‘,‘cat‘])
print Ty.cat
#有用namedtuple實現的
from collections import namedtuple
def a(*k):
return namedtuple(‘emnu‘,k)(*k)
MyEnum = a(‘FOO‘, ‘BAR‘, ‘BAZ‘)
# 帶字元數字映射的,像C/C++
def a(*k):
return namedtuple(‘enum‘,k)(*range(len(k)))
# 帶字典映射的,可以映射出各種類型,不局限於數字
def d(**k):
return namedtuple(‘enum‘,k.keys())(*k.values())
#Python: Enum枚舉的實現