Python中Enum使用的几点注意事项
作者:songofhawk 发布时间:2021-08-19 11:19:03
标签:python,枚举,enum
Enum 是个类
所以
基本的类操作都可以用
也就是我们可以添加自己的方法
class Mood(Enum):
FUNKY = 1
HAPPY = 3
def describe(self):
# self is the member here
return self.name, self.value
def __str__(self):
return 'my custom str! {0}'.format(self.value)
@classmethod
def favorite_mood(cls):
# cls here is the enumeration
return cls.HAPPY
>>> Mood.favorite_mood()
<Mood.HAPPY: 3>
>>> Mood.HAPPY.describe()
('HAPPY', 3)
>>> str(Mood.FUNKY)
'my custom str! 1'
Enum的每个类成员,都会自动被转换成当前类的一个实例
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
>>> type(Color.RED)
<enum 'Color'>
>>> isinstance(Color.GREEN, Color)
True
这就意味着,我们不能用枚举成员直接当成它的value来用:
>>> Color.RED == 1
False
>>> Color.RED.value == 1
False
枚举成员还有个name属性,跟它的变量名相同
>>> Color.RED.name == "RED"
True
枚举类有个大坑:父类有成员的时候,就不能定义子类
所以,对于上面的Color类,如果还想定义一个子类,就会出错:
>>> class MoreColor(Color):
... PINK = 17
...
Traceback (most recent call last):
...
TypeError: MoreColor: cannot extend enumeration 'Color'
但父类没有枚举成员,仅仅定义了函数是可以的:
class Foo(Enum):
def some_behavior(self):
pass
class Bar(Foo):
HAPPY = 1
SAD = 2
这显然大大限制了枚举类的扩展,一个不能访问成员的函数,用处也就不大了。
附Python Enum使用总结
1.枚举类不能用来实例化对象
2.访问枚举类中的某一项,直接使用类名访问加上要访问的项即可,比如 color.RED
3.枚举类里面定义的 Key = Value,在类外部不能修改 Value 值
4.枚举项可以用来比较,使用 ==,或者 is
5.枚举类中的 Key 不能相同,Value 可以相同,但是 Value 相同的各项 Key 都会当做别名
6.枚举类可以用 for 进行遍历,members.items() 可以遍历出含有别名的类
7.如果要枚举类中的 key 也不能相同,需要导入 unique 对枚举类进行装饰
来源:https://segmentfault.com/a/1190000041438811


猜你喜欢
- 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于
- 前言最近使用Python解析IDX文件格式的MNIST数据集,需要对二进制文件进行读取操作,其中我使用的是struct模块。查了网上挺多教程
- 前言:在转换操作中,我们执行各种操作,例如更改系列的数据类型,将系列更改为列表等。为了执行转换操作,我们有各种有助于转换的功能,例如.ast
- 微信小程序 ES6Promise.all批量上传文件实现代码客户端Page({ onLoad: function() { &nb
- 下面给大家分享python 字符串string的内置方法,具体内容详情如下所示:#__author: "Pizer Wang&qu
- 1、简介本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,
- 本文实例讲述了PHP商品秒杀问题解决方案。分享给大家供大家参考,具体如下:引言假设num是存储在数据库中的字段,保存了被秒杀产品的剩余数量。
- 数据添加函数实例//数据添加 public function newData($strName="") &n
- 1. map的使用golang中的map是一种数据类型,将键与值绑定到一起,底层是用哈希表实现的,可以快速的通过键找到对应的值。类型表示:m
- 列表生成式基础语法[exp for iter_var in iterable (if conditional)]原理:首先迭代 iterab
- 1.引言甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。Henry Gantt 为了分析已经完成的项目创建了甘特图,他
- 函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。注意其中:map和filter返回一个惰性序列,可
- python正则表达式 匹配反斜杠正则 需要把原始字符串不被转义的条件下传递给正则模块,正则再去转义。 r表示r后面的字符串为原始字符串,防
- 本文实例讲述了GO语言实现列出目录和遍历目录的方法。分享给大家供大家参考。具体如下:GO语言获取目录列表用 ioutil.ReadDir()
- 本文是基于上一篇(python项目:学生信息管理系统(初版) )进行了完善,并添加了新的功能。主要包括有:完善部分:输入错误;无数据查询等异
- 需要分件html源代码 此例中的被抓取的html源代码如下 <p align=left>2004年8月24日星期二;白天:晴有时
- 打开在节点中加入一句:max_allowed_packet=5M 将MySQL的容量扩大到5M  
- 目录前言示例文件文件编码空值日期错误函数映射方法1:直接使用labmda表达式方法二:使用自定义函数方法三:使用数值字典映射总结前言本文是给
- 引言“ 这是MySQL系列笔记的第一篇,文章内容均为本人通过实践及查阅资料相关整理所得,可用作新手入门指南,或
- 查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效