使用普通类直接实现枚举
  在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)相关推荐

  1. php枚举属于什么类型,python枚举类型是什么?python枚举类型的简单介绍

    本篇文章给大家带来的内容是关于python枚举类型是什么?python枚举类型的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一:枚举类型的定义 二:枚举类和普通类的区别 ...

  2. python读取枚举_一文读懂Python 枚举

    enum是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性.我们可以使用 enum 创建具有良好定义的标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护. 创建枚举 我 ...

  3. c语言enum能自定义吗,18、C语言 —— 枚举enum

    1.枚举的概念 枚举是C语言的一种构造数据类型.它用于声明一组命名的常数.当一个变量有几个固定的取值时,可以将这个变量定义为枚举类型.比如季节(春天,夏天,秋天,冬天)就可以定义为枚举类型. 2.枚举 ...

  4. 枚举enum与#define 宏的区别?

    枚举enum与#define 宏的区别? 1)#define 宏常量是在预编译阶段进行简单替换.枚举常量则是在编译的时候确定其值. 2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量. 3)枚举 ...

  5. java 枚举 下拉框_枚举enum在velocity模板语言中的应用-下拉菜单

    1. velocity模板vm页面 语言: #if("add" == $flag) #foreach($elem in $languageEnum) $elem.name #end ...

  6. Swift之深入解析枚举enum的底层原理

    一.Swift 枚举 枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合. Swift 的枚举类似于 Objective C 和 C 的结构,枚举 ...

  7. protobuf入门教程(五):枚举(enum)、包(package)

    枚举(enum) 消息格式 当需要定义一个消息类型的时候,可能想为一个字段指定某"预定义值序列"中的一个值,这时候可以通过枚举实现. syntax = "proto3&q ...

  8. 用枚举enum实现单例

    [README] 1,effectivejava 讲到使用 枚举类实现单例的例子,非常好用: 2,好处如下: 不用定义私有构造器: 不用定义获取单例的方法,如 getInstance() :通过 枚举 ...

  9. Java、Mysql、MyBatis 中枚举 enum 的使用

    From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念,合理的使用枚举,可以让代码阅读和数据库数据查询更加直观.高效.那么我们怎 ...

  10. c++ enum 给定类型_C++11作用域内枚举enum

    在C++11之前的枚举(enum),是没有办法两个枚举(enum)内有相同枚举名的.如果还不知道C++中枚举(enum)是什么,可以看这篇:枚举enum 如:苹果和桔子都有大,中,小.写个代码来说明下 ...

最新文章

  1. 6.1.1 验证注解的使用
  2. 在线学位课程_您在四年制计算机科学学位课程中学到的知识
  3. php parseurl的反函数,字符串修改(处理)函数
  4. [YTU]_2489( C++结构体之统计最高最低分)
  5. 10 个小技巧:快速用 Python 进行数据分析
  6. NYOJ 1053 Alice and Bob (N)
  7. Cpp 对象模型探索 / 编译器为对象创建缺省析构函数的条件
  8. 两个空间点直接距离投影公式_线积分与面积分(2):最初的公式
  9. apache pdfbox_Apache PDFBox命令行工具:无需Java编码
  10. 手机腾讯网mt2.0增量更新算法优化小记
  11. Redis知识点笔记总结
  12. JDBC中PreparedStatement接口的执行逻辑
  13. 初次涉足手机广告联盟行业
  14. mtk 软件下载过程
  15. 使用Python开发一个恐龙跑跑小游戏,玩起来
  16. 【已解决】MAC OS上teamviewer商业用途中断连接
  17. [GXYCTF 2019]Ping Ping Ping
  18. 据说币圈炒币亏钱的人,大多都是因为这6个原因!
  19. android 和 js 之间交互的封装
  20. 【RF分类】基于matlab随机森林算法数据分类【含Matlab源码 2048期】

热门文章

  1. python for循环写法_python中多重循环的写法
  2. kivy python_另一款带有Kivy,Python的Android蛇
  3. 计算机设备如何巡检,计算机联锁设备巡检作业指导书.pdf
  4. 非常简单Java web下Office转PDF功能实现 100%能用
  5. matlab中列主元三角分解法的函数,[数值算法]列主元三角分解法
  6. 这些好玩的 GitHub 项目,你知道几个?
  7. Java调用的高德api,通过经纬度查询地址信息 - 记录
  8. 【经典详解】<T> T 和 T的用法和区别,public <T> List<T> f(T a){}的详解
  9. markdown 删除线
  10. 用Python教你画一棵绝美碎花树~学会就能送给喜欢的人啦