#Python: Enum枚舉的實現

來源:互聯網
上載者:User

標籤:

#出處: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枚舉的實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.