Python深入浅出分析enum枚举类

不晚
不晚
发布时间:2026-10-15| 6人浏览过
原创

本文深入解析Python中enum枚举类的核心用法。通过对比传统大写变量定义方式,阐述使用Enum类定义常量的优势。详细演示枚举的创建、成员访问、__members__遍历及别名处理机制,并介绍如何利用unique装饰器强制键值唯一性,帮助开发者在工程实践中规范使用枚举类型。

枚举类Enum

在企业级开发场景中,枚举类的应用十分广泛。

若需定义一组常量,传统做法是使用大写字母配合整数值,例如表示月份:

# 当项目中需要使用12个月份时 JAN = 1 FEB = 2 ... NOV = 11 DEC = 12

然而,上述定义方式生成的类型是 int,且本质上仍是普通变量。在运算过程中,无法动态生成对应的枚举值,这种指代方式仅是为了更优雅地使用变量数值。

更优的方案是为此类枚举定义一个 class 类型,使每个常量成为该 class 的唯一实例。Python 提供了 Enum 类来实现这一功能。

优化后的代码如下:

# -*- coding: utf-8 -*-
from enum import Enum
# 枚举中,一个名字对应一个值
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Otc', 'Nov', 'Dec'))

由此我们获得了 Month 类型的枚举类,可直接使用 Month.Jan 引用特定常量,或通过 for 循环遍历所有成员以获取值。

Month.__members__ 是 Month 类的内置属性,用于打印成员标签。

若调用 .items() 函数,可打印出所有成员,其返回数据类型为元组。

for name, member in Month.__members__.items():

print(f'{name} => {member} , {member.value}')+

接下来定义一个颜色常量枚举。

# -*- coding: utf-8 -*-
from enum import Enum
# 枚举中 一个一个名字对应一个值
Month = Enum('抬头-Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
print(Month.__members__)  # 枚举中的值自动从1开始,不会重复
# 得到三月份的值
print(Month['Mar'].value)  # 3
# 根据(2)来获得月份名字
print(Month(2).name)  # Feb
# 定义一个颜色的常量枚举
class Color(Enum):  # 第二种:自定义一个枚举类
    red = 100
    green = 200
    blue = 300
    yellow = 200  # 不允许key相同或者value,如果value重复,根据value取name只能取第一个
print(Color(200))  # Color.green

注意,枚举中不允许 Key 相同或 Value 相同;若 Value 重复,通过 Value 获取 Name 时仅能取到第一个匹配的项。

总结

1. 枚举类不可用于实例化对象。

2. 访问枚举项时,直接使用类名后接项名即可,例如 color.RED。

3. 枚举类中定义的 Key = Value,在类外部无法修改 Value 值。

4. 枚举项支持比较操作,可使用 == 或 is 运算符。

5. 枚举类中的 Key 必须唯一,Value 可以重复;当 Value 相同时,各项 Key 均被视为彼此的别名。

6. 枚举类支持 for 循环遍历,members.items() 可遍历包含别名的所有类成员。

7. 若需确保 Key 和 Value 均不重复,需导入 unique 装饰器对枚举类进行修饰。

至此,关于 Python 深入浅出分析 enum 枚举类的介绍已完成。如需了解更多 Python 枚举类相关内容,请搜索本站过往文章或继续浏览后续文章,感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。