python枚举类的意义_python 枚举类型什么意思
匿名用户
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 枚举类型什么意思相关推荐
- 枚举类——概述、常用方法、自定义枚举类、Enum创建枚举类
一.枚举类的概述 1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类 3.如果枚举类中只一个对象,则可以作为单例模式的实现方式. 二.枚举类 ...
- python枚举类的意义_用于ORM目的的python枚举类
编辑问题 我正在尝试创建一个类工厂,它可以生成具有以下属性的枚举类: >从列表中初始化类 允许值(即,它) 自动生成!). > Class创建自己的一个实例 对于每个允许的值. >类 ...
- java中的枚举类_java中的枚举类型
java中为了对参数类型使用限定,引入了泛型,实现了在编译期对参数类型是否合法的判断.同样,java为了对参数的值的限定,引入了枚举类,实现了在编译期对参数的值是否合法的判断. 首先我们用自定义类的方 ...
- python元类的概念_Python中的元类编程 | 学步园
过去有这样的概念,一直没有深究它的意义.今天同事问到,刚好也好好了解下. #===============================================Python中的元类编程=== ...
- Java基础学习——Java网络编程(三)自定义枚举类、枚举类的常用方法、枚举类实现接口、枚举类的实际应用
一.什么是枚举 枚举法:一枚一枚的列举出来,列举的元素是有限的.确定的. 例如:星期(一.二.三.四.五.六.日).性别(男.女).季节(春.夏.秋.冬) 在Java中的关键字为enum 二.枚举类的 ...
- python新式类c3算法_Python 新式类继承关系的 C3 算法(Python 2.3 的方法解析顺序,MRO)...
Python 新式类继承关系的 C3 算法(Python 2.3 的方法解析顺序,MRO) 翻译:刘硕 摘要:本文档面向于想要了解Python 2.3版本中 C3 方法解析顺序的 Python程序开发 ...
- python 元类工厂模式_Python进阶丨如何创建你的第一个Python元类?
摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...
- python怎么定义int变量_Python 变量类型 | 菜鸟教程
Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...
- java枚举类构造方法默认是,枚举类型的构造方法_Java语言程
枚举类型的构造方法_Java语言程 6.6.4 枚举类型的构造方法 枚举类型既然是类,那么就可以有构造方法.只不过只能是私有的(private),不能有公有的(public)构造方法,这是为了避免直接 ...
最新文章
- 阿里算法,浙大博士带你写项目经历!
- jvm八:接口初始化规则
- 图形脚本语言sikuli
- 基于stm32、0.96寸OLED实现的贪吃蛇小游戏(详细源码注释)
- Solr入门和实践以及我对Solr的8点理解
- Why IBASE category 03 is filtered out in creation
- CSDN博客如何在有序序列中缩进代码段或图片
- centos 并发请求数_jmeter 实战分析并发、RPS、RT 公式换算
- PHP第一季视频教程.李炎恢.学习笔记(五)(第3章 操作符与控制结构(1)(2))
- 算是目前PAYPAL最全最完整的开发方式了
- NIVIDIA 硬解码学习1
- linux网络设备驱动(一)
- JES专栏:Portlets的国际化和本地化(eNews 第二十八期/2007.09)
- linux 怎么把新硬盘分区,linux添加新硬盘分区
- 项目管理软件用哪个好?推荐这6款项目管理工具
- java nio 按行读取_JAVA之NIO按行读写大文件,完美解决中文乱码问题
- 【Chrome】Chrome主页被毒霸篡改,重新设置主页也没作用解决办法
- python 爬取加密视频_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址
- 双十一不仅程序员忙,买家秀也很忙
- Vue后台管理系统项目(4)路由的搭建
热门文章
- 配置案例丨Modbus转Profinet网关连接丹佛斯变频器
- A850/A870 TWRP Recovery简繁中文版编译及修改教程[2013.6.16更新]
- H5自定义video播放控件,播放暂停使用图标
- docker1.10.3-jetty8-jersey1.x 构建微服务
- [阿里云高校计划]Day4-车辆保险应用
- 子网划分及子网掩码计算方法
- mysql 一个中文占多少字节数_mysql里一个中文汉字占多少字节数?
- 这年头,谁还没点收集癖?”后浪“青年骚操作大赏!
- mysql数据库增量复制_mysql数据库增量备份
- python用tkinter实现qq_Python+Tkinter 密保小工具-阿里云开发者社区