匿名用户

1级

2016-08-10 回答

枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们可以通过很多方法来实现它,例如字典、类等:

WEEKDAY = {

'MON': 1,

'TUS': 2,

'WEN': 3,

'THU': 4,

'FRI': 5

}

class Color:

RED = 0

GREEN = 1

BLUE = 2

上面两种方法可以看做是简单的枚举类型的实现,如果只在局部范围内用到了这样的枚举变量是没有问题的,但问题在于它们都是可变的(mutable),也就是说可以在其它地方被修改从而影响其正常使用:

WEEKDAY['MON'] = WEEKDAY['FRI']

print(WEEKDAY)

{'FRI': 5, 'TUS': 2, 'MON': 5, 'WEN': 3, 'THU': 4}

通过类定义的枚举甚至可以实例化,变得不伦不类:

c = Color()

print(c.RED)

Color.RED = 2

print(c.RED)

0

2

当然也可以使用不可变类型(immutable),例如元组,但是这样就失去了枚举类型的本意,将标签退化为无意义的变量:

COLOR = ('R', 'G', 'B')

print(COLOR[0], COLOR[1], COLOR[2])

R G B

为了提供更好的解决方案,Python 通过 PEP 435 在 3.4 版本中添加了 enum 标准库,3.4 之前的版本也可以通过 pip install enum 下载兼容支持的库。enum 提供了 Enum/IntEnum/unique 三个工具,用法也非常简单,可以通过继承 Enum/IntEnum 定义枚举类型,其中 IntEnum 限定枚举成员必须为(或可以转化为)整数类型,而 unique 方法可以作为修饰器限定枚举成员的值不可重复:

from enum import Enum, IntEnum, unique

try:

@unique

class WEEKDAY(Enum):

MON = 1

TUS = 2

WEN = 3

THU = 4

FRI = 1

except ValueError as e:

print(e)

duplicate values found in : FRI -> MON

try:

class Color(IntEnum):

RED = 0

GREEN = 1

BLUE = 'b'

except ValueError as e:

print(e)

invalid literal for int() with base 10: 'b'

python枚举类的意义_python 枚举类型什么意思相关推荐

  1. 枚举类——概述、常用方法、自定义枚举类、Enum创建枚举类

    一.枚举类的概述 1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类 3.如果枚举类中只一个对象,则可以作为单例模式的实现方式. 二.枚举类 ...

  2. python枚举类的意义_用于ORM目的的python枚举类

    编辑问题 我正在尝试创建一个类工厂,它可以生成具有以下属性的枚举类: >从列表中初始化类 允许值(即,它) 自动生成!). > Class创建自己的一个实例 对于每个允许的值. >类 ...

  3. java中的枚举类_java中的枚举类型

    java中为了对参数类型使用限定,引入了泛型,实现了在编译期对参数类型是否合法的判断.同样,java为了对参数的值的限定,引入了枚举类,实现了在编译期对参数的值是否合法的判断. 首先我们用自定义类的方 ...

  4. python元类的概念_Python中的元类编程 | 学步园

    过去有这样的概念,一直没有深究它的意义.今天同事问到,刚好也好好了解下. #===============================================Python中的元类编程=== ...

  5. Java基础学习——Java网络编程(三)自定义枚举类、枚举类的常用方法、枚举类实现接口、枚举类的实际应用

    一.什么是枚举 枚举法:一枚一枚的列举出来,列举的元素是有限的.确定的. 例如:星期(一.二.三.四.五.六.日).性别(男.女).季节(春.夏.秋.冬) 在Java中的关键字为enum 二.枚举类的 ...

  6. python新式类c3算法_Python 新式类继承关系的 C3 算法(Python 2.3 的方法解析顺序,MRO)...

    Python 新式类继承关系的 C3 算法(Python 2.3 的方法解析顺序,MRO) 翻译:刘硕 摘要:本文档面向于想要了解Python 2.3版本中 C3 方法解析顺序的 Python程序开发 ...

  7. python 元类工厂模式_Python进阶丨如何创建你的第一个Python元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...

  8. python怎么定义int变量_Python 变量类型 | 菜鸟教程

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...

  9. java枚举类构造方法默认是,枚举类型的构造方法_Java语言程

    枚举类型的构造方法_Java语言程 6.6.4 枚举类型的构造方法 枚举类型既然是类,那么就可以有构造方法.只不过只能是私有的(private),不能有公有的(public)构造方法,这是为了避免直接 ...

最新文章

  1. 阿里算法,浙大博士带你写项目经历!
  2. jvm八:接口初始化规则
  3. 图形脚本语言sikuli
  4. 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)
  5. Solr入门和实践以及我对Solr的8点理解
  6. Why IBASE category 03 is filtered out in creation
  7. CSDN博客如何在有序序列中缩进代码段或图片
  8. centos 并发请求数_jmeter 实战分析并发、RPS、RT 公式换算
  9. PHP第一季视频教程.李炎恢.学习笔记(五)(第3章 操作符与控制结构(1)(2))
  10. 算是目前PAYPAL最全最完整的开发方式了
  11. NIVIDIA 硬解码学习1
  12. linux网络设备驱动(一)
  13. JES专栏:Portlets的国际化和本地化(eNews 第二十八期/2007.09)
  14. linux 怎么把新硬盘分区,linux添加新硬盘分区
  15. 项目管理软件用哪个好?推荐这6款项目管理工具
  16. java nio 按行读取_JAVA之NIO按行读写大文件,完美解决中文乱码问题
  17. 【Chrome】Chrome主页被毒霸篡改,重新设置主页也没作用解决办法
  18. python 爬取加密视频_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址
  19. 双十一不仅程序员忙,买家秀也很忙
  20. Vue后台管理系统项目(4)路由的搭建

热门文章

  1. 配置案例丨Modbus转Profinet网关连接丹佛斯变频器
  2. A850/A870 TWRP Recovery简繁中文版编译及修改教程[2013.6.16更新]
  3. H5自定义video播放控件,播放暂停使用图标
  4. docker1.10.3-jetty8-jersey1.x 构建微服务
  5. [阿里云高校计划]Day4-车辆保险应用
  6. 子网划分及子网掩码计算方法
  7. mysql 一个中文占多少字节数_mysql里一个中文汉字占多少字节数?
  8. 这年头,谁还没点收集癖?”后浪“青年骚操作大赏!
  9. mysql数据库增量复制_mysql数据库增量备份
  10. python用tkinter实现qq_Python+Tkinter 密保小工具-阿里云开发者社区