码迷,mamicode.com
首页 > 编程语言 > 详细

#Python: Enum枚举的实现

时间:2015-05-08 12:24:57      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

#出处: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枚举的实现

标签:

原文地址:http://www.cnblogs.com/mhxy13867806343/p/4487193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!