博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python: Enum枚举的实现
阅读量:7067 次
发布时间:2019-06-28

本文共 1726 字,大约阅读时间需要 5 分钟。

      从C系语言过来用Python,好不容易适应了写代码不打花括号,突然有一天发现它居然木有枚举……于是stackoverflow了一把,发现神人的枚举(enum)实现到处都是,于是汉化总结过来。

如果是新版Python用户(Python 3.4 with ):

from enum import EnumAnimal = Enum('Animal', 'ant bee cat dog')

 

or

class Animals(Enum):    ant = 1    bee = 2    cat = 3    dog = 4

 

旧版Python用户可以充分发挥动态语言的优越性来构造枚举,有简单的:

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'

 

有复杂的:

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

 

有带值到名称映射的:

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实现的:

class Enum(set):    def __getattr__(self, name):        if name in self:            return name        raise AttributeErrorAnimals = Enum(["DOG", "CAT", "HORSE"])print Animals.DOG

 

有用range实现的:

dog, cat, rabbit = range(3)# orclass Stationary:    (Pen, Pencil, Eraser) = range(0, 3)print Stationary.Pen

 

有用tuple实现的:

class Enum(tuple): __getattr__ = tuple.indexState = Enum(['Unclaimed', 'Claimed'])print State.Claimed

 

有用namedtuple实现的:

from collections import namedtupledef enum(*keys):    return namedtuple('Enum', keys)(*keys)MyEnum = enum('FOO', 'BAR', 'BAZ')# 带字符数字映射的,像C/C++def enum(*keys):    return namedtuple('Enum', keys)(*range(len(keys)))# 带字典映射的,可以映射出各种类型,不局限于数字def enum(**kwargs):    return namedtuple('Enum', kwargs.keys())(*kwargs.values())

转载地址:http://vhtll.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
【风云原创】Flash技术将被Html5枪毙,Silverlight将何去何从?
查看>>
power shell测试wmi
查看>>
话里话外:成功CEO的用人之道——按需激励
查看>>
openwrt无线连接互联网的实现原理【1】
查看>>
WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
查看>>
谷歌为Pwnium***竞赛再掷重金 将提供200万美元奖金
查看>>
搭建K8S高可用集群(二进制方式)
查看>>
BSON与JSON的区别
查看>>
我的友情链接
查看>>
Play Framework 模板里使用注入访问数据层
查看>>
Win2008学习(十一),解决Remote App Web访问的证书问题
查看>>
python 实现 自动oa 签到签退 发送邮件提醒
查看>>
今天打开阿里妈妈惊现 ¥50 元佣金
查看>>
Oracle 正确删除archivelog文件
查看>>
微信JS 关闭网页
查看>>
[AAuto]给百宝箱增加娱乐功能
查看>>
Tigase XMPP Server源码部署
查看>>
Intellij IDEA创建Maven Web项目
查看>>
java 7 入门书籍
查看>>