#Python: Enum枚举的实现

#出处: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 AttributeErrorAnimals = E1(["DOG", "CAT", "HORSE"])print Animals.DOG#有用range实现的a,b,c=range(3)#orclass 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 namedtupledef 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())
时间: 2024-11-15 00:34:04

#Python: Enum枚举的实现的相关文章

Python 的枚举 Enum

枚举是常用的功能,看看Python的枚举. from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) 枚举的定义 首先,定义枚举要导入enum模块. 枚举定义用class关键字,继承Enum类. 注意: 定义枚举时,成员名称不允许重复 默认情况下,不同的成员值允许相同.但是两个相同值的成员,第二个

java之enum枚举(2015年05月28日)

背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定了解下enum枚举   一.简介 Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型. 二.基本用法 1.作为常量使用 一个完整的枚举类型示例 /** * 枚举 * @author Dreyer * @since 1.0 * @dat

enum枚举类型的定义

enum枚举类型的定义方式与某种用法 #include <iostream> using namespace std; int main() { enum TOT{ zero, one, two, three, four, five };//0,1,2,3,4,5 TOT to1; to1 = five; switch (to1) { case 0:cout << "zero\n"; break; case 1:cout << "one\n

中秋佳节--理解Enum枚举

一.Enum枚举的作用 1.使用枚举可以限定取值范围,枚举中定义的每个常量都可以理解为对象: Eg: Public enum Color{ RED, GREEN,BULE; } 说明:RED实际上就表示的是枚举的名称,默认的编号是0,可以使用ordinal()方法获得. 2.使用enum关键字定义枚举类,其中包含的对象可以初始化定义(初始化构造函数) Eg: package cn.test.java.enums; enum ColorDemo{ RED("红色"),GREEN(&quo

C语言——enum枚举类型

enum是枚举类型,实际上就是定义一组值,enum定义数据类型的值只能是这一组值中的一个. 在实际生活中,很多问题都与是这样的.如人的性别,只有男女两种:一星期有七天:月份只有十二个值. 如下定义一周七天的值: #include <stdio.h> typedef enum { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }week; int main() { printf("%d %d %d %d %

开发中巧用Enum枚举类型

在实际开发中,在数据库表设计中,我们往往习惯于用一个Int类型的State字段去表示数据的状态,这个字段很方便去表示这条数据的状态,但是又不愿意去建一张这个State字段的外键表去解释状态.(这一类型表状态的字段可能还会有很多,这里只是举个例)   我们一般会把这个State字段当成一个约定,去在项目中应用(比如:0:启用,1:禁用) 在后台管理或其它地方显示Int类型对应的实际状态时,再到公共类中去写一个方法,里面用一个switch...case去返回对应的中文解释. http://www.d

Java Enum枚举

1.代码 import java.lang.*; // enum showing Mobile prices enum Mobile { Samsung(400), Nokia(250),Motorola(325); int price; Mobile(int p) { price = p; } int showPrice() { return price; } } public class EnumDemo { public static void main(String args[]) {

获取Enum枚举值描述的几法方法

原文:获取Enum枚举值描述的几法方法 1.定义枚举时直接用中文 由于VS对中文支持的很不错,所以很多程序员都采用了此方案. 缺点:1.不适合多语言 2.感觉不太完美,毕竟大部分程序员大部分代码都使用英文 2.利用自定义属性定义枚举值的描述(博客园-大尾巴狼) 缺点:不适合多语言 原文:http://www.cnblogs.com/hilite/archive/2006/03/28/360793.html 枚举定义: [EnumDescription("订单.订单中的产品.产品项的状态.&quo

Java多线程编程6--单例模式与多线程--使用静态内置类、(反)序列化、static代码块、enum枚举数据类实现

前面讲的用DCL可以解决多线程单例模式的非线程安全,虽然看下去十分完美,但还是有一些问题,具体分析看这篇:http://blog.csdn.net/ochangwen/article/details/51348078 当然用其他的办法也能达到同样的效果. 1.使用静态内置类实现单例模式 public class Singleton { /* 私有构造方法,防止被实例化 */ private Singleton() { } /* 此处使用一个内部类来维护单例 */ private static c