尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python标准库enum模块实现枚举类

Python标准库enum模块实现枚举类
📅 发布时间:2026/6/18 12:07:58

一、介绍

Python标准库中的enum模块提供了一种创建枚举类型的方式,枚举类型是一种特殊的类,用于定义一组命名的常量。以下是enum模块的主要特点和实现方式:

  1. ‌基本用法‌:

    • 使用Enum类可以定义一个枚举类型,枚举成员是类的属性,每个成员有唯一的名称和值。
    • 枚举成员的值可以是任意类型,但通常是整数或字符串。
  2. ‌枚举成员‌:

    • 枚举成员是唯一的,不能重复定义。
    • 可以通过名称或值访问枚举成员。
  3. ‌自动赋值‌:

    • 使用auto()函数可以自动为枚举成员分配值(通常是递增的整数)。
  4. ‌功能扩展‌:

    • IntEnum:枚举成员的值必须是整数,并且可以与整数直接比较。
    • Flag和IntFlag:支持按位运算的枚举类型,适用于标志位操作。
  5. ‌迭代和比较‌:

    • 枚举类型是可迭代的,可以遍历所有成员。
    • 枚举成员支持身份比较(is)和相等比较(==),但不支持大小比较(除非使用IntEnum)。
  6. ‌别名和唯一性‌:

    • 可以定义别名(多个名称对应同一个值),但默认情况下不允许重复值(除非使用@unique装饰器禁用别名)。
from enum import Enum, auto, unique@unique
class Color(Enum):RED = 1GREEN = 2BLUE = 3# YELLOW = 1  # 会报错,因为值重复且使用了@unique装饰器class Status(Enum):PENDING = auto()RUNNING = auto()COMPLETED = auto()# 访问枚举成员
print(Color.RED)  # 输出: Color.RED
print(Color.RED.name)  # 输出: RED
print(Color.RED.value)  # 输出: 1# 遍历枚举
for status in Status:print(status)
"""
Status.PENDING
Status.RUNNING
Status.COMPLETED
"""

enum模块的枚举类提供了清晰、安全的方式管理常量,避免了魔法数字和字符串的使用,提高了代码的可读性和可维护性。

 

二、多重继承int、str

1、单继承Enum

特点:‌

  • ‌类型安全‌:枚举成员是独立的枚举对象,不与整数、字符串等混用。
  • ‌禁止整数、字符串的操作‌:Color.RED + 1会报错(不支持运算)。
  • ‌严格比较‌:Color.RED == 1 返回 False(需显式比较.value)。

‌适用场景‌:需要强类型约束,避免枚举值与数字、字符串混淆时。

from enum import Enumclass Color(Enum):"""颜色枚举类示例"""RED = 1GREEN = 2BLUE = 3class Status(Enum):"""状态枚举类示例"""PENDING = 'pending'RUNNING = 'running'COMPLETED = 'completed'"""
枚举成员是独立的枚举对象,不与整数、字符串混用。
需要使用时,要通过 value 获取实际的值才能进行使用
"""
print(Color.RED == 1)  # False
print(Color.RED.value == 1)  # 需要通过 value 获取实际的值,True
print(Status.RUNNING == 'running')  # False
print(Status.RUNNING.value == 'running')  # 需要通过 value 获取实际的值,True

2、int、str和Enum多重继承

特点:‌

  • ‌整数兼容‌:枚举成员可当整数、字符串使用(Color.RED + 1 输出 2)。
  • ‌隐式比较‌:Color.RED == 1 返回 True。
  • ‌序列化友好‌:直接存储为整数、字符串(如JSON序列化)。

‌适用场景‌:需要与数字交互(如数据库状态码、协议字段)。

from enum import Enumclass Color(int, Enum):"""颜色枚举类示例"""RED = 1GREEN = 2BLUE = 3class Status(str, Enum):"""状态枚举类示例"""PENDING = 'pending'RUNNING = 'running'COMPLETED = 'completed'"""
有没有通过 value 取值都能正常使用
"""
print(Color.RED)  # 类型还是Color.RED,但是继承了 int,实际使用的时候是 int 类型,不需要通过 value 获取值
print(Color.RED == 1)  # 没有通过 value 但是继承了 int:True
print(Color.RED.value == 1)  # 通过 value 获取值,Trueprint(Status.RUNNING)  # 类型还是Status.RUNNING,但是继承了 str,实际使用的时候是 str 类型,不需要通过 value 获取值
print(Status.RUNNING == 'running')  # 没有通过 value 但是继承了 str:True
print(Status.RUNNING.value == 'running')  # 通过 value 获取值,True

关键区别总结‌

特性纯Enumint + Enum
成员类型 枚举对象 枚举对象 + 整数
数学运算支持 ❌ 报错 ✅ 支持
与整数直接比较 ❌ 需用.value ✅ 直接比较
序列化为数字 ❌ 需手动处理 ✅ 自动转为整数

根据需求选择:强类型用纯Enum,需数字兼容则加int。

 

相关新闻

  • 修改人大金仓V8数据库时间
  • 油猴(Tampermonkey)插件从安装到使用
  • React 展示Markdown内容 - 教程

最新新闻

  • 闲置黄金奢品变现怎么选?5家本地靠谱回收机构横向深度对比 - 奢品小当家
  • 从零到一:AttackLab缓冲区溢出攻击实战全解析
  • 从RoboCup到智能工厂:仙工SRC控制器的进化之路与生态构建
  • StarUML Java插件:3步实现UML与Java代码的双向同步
  • 深圳黄金回收实测指南,六大本地奢品门店走访测评 - 薛定谔的梨花猫
  • 2026 宁波闲置名包处置全测评:正规连锁门店横向对比,看懂皮具估价底层逻辑 - 奢侈品回收评测

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号