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

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

在Python中想要实现枚举功能的方式比较多,可以通过字典这一数据结构,利用键与值的对应关系,可以实现枚举的功能。

my_Enum={'red':1,'yellow':2,'blue':3}print(my_Enum['red'])

也可以使用类来建立一个属性名与属性值之间的对应关系来实现枚举的功能,然后用.操作符来读取

class my_Enum{     red=1,    yellow=2,    blue=3       }my_Enum.red

但是用以上两种方式出现的问题也是很明显的:

1.枚举值可以修改

2.用类定义的话,这些枚举功能的类可以被实例化

3.枚举值是否重复无法检查

在Python3.4引入了enum模块,这个模块就是为了解决上面所说到的问题的,使用的时候首先引入模块:

import enum

enum里面提供了Enum和IntEnum等类,可以用来继承。

当然,这些类就被限制了,

1.不能被继承

2.定义之后不能在类内修改

3.枚举名称不能重复。如果有值重复的情况,那么后者的名称将会是前者的别名,其实是一个对象。

要控制枚举值不能重复,可以在枚举类之前加上@unique

对枚举类的操作:

from enum import IntEnumclass my_Enum(IntEnum):    red=1,    green=2,    blue=3,    what=3,    yellow=9#按名字取出枚举的值print(my_Enum['red'])print(my_Enum['what'])#枚举的值返回枚举名字print(my_Enum(9))print(my_Enum['red'].name)print(my_Enum['red'].value)#可以用for in迭代for i in my_Enum:    print(i.name,'->',i.value)

 运行结果:

my_Enum.redmy_Enum.bluemy_Enum.yellowred1red -> 1green -> 2blue -> 3yellow -> 9

 

转载于:https://www.cnblogs.com/lumaoxin/p/7028640.html

你可能感兴趣的文章
VTKMY 3.3 VS 2010 Configuration 配置
查看>>
01_1_准备ibatis环境
查看>>
windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决
查看>>
JavaScript中的BOM和DOM
查看>>
360浏览器兼容模式 不能$.post (不是a 连接 onclick的问题!!)
查看>>
spring注入Properties
查看>>
【BZOJ-1055】玩具取名 区间DP
查看>>
Bit Twiddling Hacks
查看>>
LeetCode : Reverse Vowels of a String
查看>>
时间戳与日期的相互转换
查看>>
jmeter(五)创建web测试计划
查看>>
python基本数据类型
查看>>
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
关于TDD的思考
查看>>
Cocos2d-x学习之windows 7 android环境搭建
查看>>
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
MaiN
查看>>
[Python学习] 简单网络爬虫抓取博客文章及思想介绍
查看>>