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 对枚举类进行装饰

总结

到此这篇关于Python中Enum使用的几点注意事项的文章就介绍到这了,更多相关Python Enum使用注意事项内容请搜索恩蓝小号以前的文章或继续浏览下面的相关文章希望大家以后多多支持恩蓝小号!

原创文章,作者:KCAXS,如若转载,请注明出处:https://www.wangzhanshi.com/n/18613.html

(0)
KCAXS的头像KCAXS
上一篇 2025年2月11日 14:10:32
下一篇 2025年2月11日 14:10:34

相关推荐

  • python 文件和路径操作函数小结

    1: os.listdir(path) //path为目录 功能相当于在path目录下执行dir命令,返回为list类型 print os.listdir(‘..&#8…

    Python 2024年12月24日
  • python实现员工管理系统

    这是一个简易的员工管理系统,实现最简单的功能: 1.登录用户密码验证(错误三次自动退出) 2.支持文本员工的搜索、添加、删除、修改 3.一级层级多个选项、二级层级多个选项,都支持判…

    2025年1月1日
  • 利用Python实现在PDF文档中插入文字水印

    前言 在传播PDF文档的过程中,如何有效地保护文档的版权和所有权,防止非法复制和滥用,成为了一个不可忽视的问题。为此,给PDF文档添加水印便成了一种行之有效的保护手段。水印作为一种…

    2025年1月1日
  • 10个Python常用的损失函数及代码实现分享

    什么是损失函数 损失函数是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误,损失函数值越低则预测越接近真实值。对每个…

    2024年12月23日
  • 用python实现PDF解密打印文件

    前言: 我们在打印一些 PDF 文件的时候可能会遇见加密不能打印的情况,需要提供密码才能打印。如果直接在浏览器中浏览 PDF 文件,它不能调取打印功能。但是我们可以换一个思路转换一…

    2024年12月24日
  • 深入理解python对json的操作总结

    Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据…

    2024年12月26日
  • Python OpenCV获取图片的基本参数信息

    在图像处理领域,了解图像的基本信息是必不可少的第一步。 之前已经使用 cv2.imread() 方法将图片读取出来了。我们还可以使用 OpenCV 提供的一些方法去读取图片的尺寸、…

    Python 2024年12月17日
  • 开启Django博客的RSS功能的实现方法

    作者:HelloGitHub-追梦人物  文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 博客提供 RSS 订阅应该是标配,这样读者就可以通过…

    2024年12月26日
  • Python实现聚类K-means算法详解

    K-means(K均值)算法是最简单的一种聚类算法,它期望最小化平方误差 注:为避免运行时间过长,通常设置一个最大运行轮数或最小调整幅度阈值,若到达最大轮数或调整幅度小于阈值,则停…

    2024年12月29日
  • Python如何读取、写入CSV数据

    问题 你想读写一个CSV格式的文件。 解决方案 对于大多数的CSV格式的数据读写问题,都可以使用 csv 库。、例如,假设你在一个名叫stocks.csv文件中有一些股票市场数据,…

    Python 2024年12月23日

发表回复

登录后才能评论