Python——枚举(enum)
使用普通类直接实现枚举
在Python中,枚举和我们在对象中定义的类变量时一样的,每一个类变量就是一个枚举项,访问枚举项的方式为:类名加上类变量,像下面这样:
class color():YELLOW = 1RED = 2GREEN = 3PINK = 4# 访问枚举项
print(color.YELLOW) # 1
虽然这样是可以解决问题的,但是并不严谨,也不怎么安全,比如:
1、枚举类中,不应该存在key相同的枚举项(类变量)
2、不允许在类外直接修改枚举项的值
class color():YELLOW = 1YELLOW = 3 # 注意这里又将YELLOW赋值为3,会覆盖前面的1RED = 2GREEN = 3PINK = 4# 访问枚举项
print(color.YELLOW) # 3# 但是可以在外部修改定义的枚举项的值,这是不应该发生的
color.YELLOW = 99
print(color.YELLOW) # 99
解决方案:使用enum模块
enum模块是系统内置模块,可以直接使用import导入,但是在导入的时候,不建议使用import enum将enum模块中的所有数据都导入,一般使用的最多的就是enum模块中的Enum、IntEnum、unique这几项
# 导入枚举类
from enum import Enum# 继承枚举类
class color(Enum):YELLOW = 1BEOWN = 1 # 注意BROWN的值和YELLOW的值相同,这是允许的,此时的BROWN相当于YELLOW的别名RED = 2GREEN = 3PINK = 4class color2(Enum):YELLOW = 1RED = 2GREEN = 3PINK = 4
使用自己定义的枚举类:
print(color.YELLOW) # color.YELLOW
print(type(color.YELLOW)) # <enum 'color'>print(color.YELLOW.value) # 1
print(type(color.YELLOW.value)) # <class 'int'>print(color.YELLOW == 1) # False
print(color.YELLOW.value == 1) # True
print(color.YELLOW == color.YELLOW) # True
print(color.YELLOW == color2.YELLOW) # False
print(color.YELLOW is color2.YELLOW) # False
print(color.YELLOW is color.YELLOW) # Trueprint(color(1)) # color.YELLOW
print(type(color(1))) # <enum 'color'>注意事项如下:
1、枚举类不能用来实例化对象
2、访问枚举类中的某一项,直接使用类名访问加上要访问的项即可,比如 color.YELLOW
3、枚举类里面定义的Key = Value,在类外部不能修改Value值,也就是说下面这个做法是错误的
color.YELLOW = 2 # Wrong, can't reassign member
4、枚举项可以用来比较,使用==,或者is5、导入Enum之后,一个枚举类中的Key和Value,Key不能相同,Value可以相,但是Value相同的各项Key都会当做别名,6、如果要枚举类中的Value只能是整型数字,那么,可以导入IntEnum,然后继承IntEnum即可,注意,此时,如果value为字符串的数字,也不会报错:
from enum import IntEnum
7、如果要枚举类中的key也不能相同,那么在导入Enum的同时,需要导入unique函数
from enum import Enum, unique
Python——枚举(enum)相关推荐
- php枚举属于什么类型,python枚举类型是什么?python枚举类型的简单介绍
本篇文章给大家带来的内容是关于python枚举类型是什么?python枚举类型的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一:枚举类型的定义 二:枚举类和普通类的区别 ...
- python读取枚举_一文读懂Python 枚举
enum是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性.我们可以使用 enum 创建具有良好定义的标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护. 创建枚举 我 ...
- c语言enum能自定义吗,18、C语言 —— 枚举enum
1.枚举的概念 枚举是C语言的一种构造数据类型.它用于声明一组命名的常数.当一个变量有几个固定的取值时,可以将这个变量定义为枚举类型.比如季节(春天,夏天,秋天,冬天)就可以定义为枚举类型. 2.枚举 ...
- 枚举enum与#define 宏的区别?
枚举enum与#define 宏的区别? 1)#define 宏常量是在预编译阶段进行简单替换.枚举常量则是在编译的时候确定其值. 2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量. 3)枚举 ...
- java 枚举 下拉框_枚举enum在velocity模板语言中的应用-下拉菜单
1. velocity模板vm页面 语言: #if("add" == $flag) #foreach($elem in $languageEnum) $elem.name #end ...
- Swift之深入解析枚举enum的底层原理
一.Swift 枚举 枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合. Swift 的枚举类似于 Objective C 和 C 的结构,枚举 ...
- protobuf入门教程(五):枚举(enum)、包(package)
枚举(enum) 消息格式 当需要定义一个消息类型的时候,可能想为一个字段指定某"预定义值序列"中的一个值,这时候可以通过枚举实现. syntax = "proto3&q ...
- 用枚举enum实现单例
[README] 1,effectivejava 讲到使用 枚举类实现单例的例子,非常好用: 2,好处如下: 不用定义私有构造器: 不用定义获取单例的方法,如 getInstance() :通过 枚举 ...
- Java、Mysql、MyBatis 中枚举 enum 的使用
From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念,合理的使用枚举,可以让代码阅读和数据库数据查询更加直观.高效.那么我们怎 ...
- c++ enum 给定类型_C++11作用域内枚举enum
在C++11之前的枚举(enum),是没有办法两个枚举(enum)内有相同枚举名的.如果还不知道C++中枚举(enum)是什么,可以看这篇:枚举enum 如:苹果和桔子都有大,中,小.写个代码来说明下 ...
最新文章
- 6.1.1 验证注解的使用
- 在线学位课程_您在四年制计算机科学学位课程中学到的知识
- php parseurl的反函数,字符串修改(处理)函数
- [YTU]_2489( C++结构体之统计最高最低分)
- 10 个小技巧:快速用 Python 进行数据分析
- NYOJ 1053 Alice and Bob (N)
- Cpp 对象模型探索 / 编译器为对象创建缺省析构函数的条件
- 两个空间点直接距离投影公式_线积分与面积分(2):最初的公式
- apache pdfbox_Apache PDFBox命令行工具:无需Java编码
- 手机腾讯网mt2.0增量更新算法优化小记
- Redis知识点笔记总结
- JDBC中PreparedStatement接口的执行逻辑
- 初次涉足手机广告联盟行业
- mtk 软件下载过程
- 使用Python开发一个恐龙跑跑小游戏,玩起来
- 【已解决】MAC OS上teamviewer商业用途中断连接
- [GXYCTF 2019]Ping Ping Ping
- 据说币圈炒币亏钱的人,大多都是因为这6个原因!
- android 和 js 之间交互的封装
- 【RF分类】基于matlab随机森林算法数据分类【含Matlab源码 2048期】
热门文章
- python for循环写法_python中多重循环的写法
- kivy python_另一款带有Kivy,Python的Android蛇
- 计算机设备如何巡检,计算机联锁设备巡检作业指导书.pdf
- 非常简单Java web下Office转PDF功能实现 100%能用
- matlab中列主元三角分解法的函数,[数值算法]列主元三角分解法
- 这些好玩的 GitHub 项目,你知道几个?
- Java调用的高德api,通过经纬度查询地址信息 - 记录
- 【经典详解】<T> T 和 T的用法和区别,public <T> List<T> f(T a){}的详解
- markdown 删除线
- 用Python教你画一棵绝美碎花树~学会就能送给喜欢的人啦