Python枚举类型教程_enum模块使用详解

发布时间 - 2026-01-05 00:00:00    点击率:
Python enum模块提供类型安全、可迭代、不可变的命名常量枚举类,支持名称/值双向查找、auto()自动赋值、@unique防别名、属性方法扩展及IntEnum整数比较。

Python 的 enum 模块提供了一种清晰、安全、可读性强的方式来定义一组命名常量。它不是简单地用变量代替数字,而是构建出有类型、可迭代、不可变、支持名称/值双向查找的枚举类。

定义与基本访问方式

enum 导入 Enum,继承后定义类成员即可:

  • 每个成员由名称(.name)和值(.value)组成,二者严格分离
  • 通过点号访问:Color.RED 返回枚举成员对象
  • 获取名称字符串:Color.RED.name"RED"
  • 获取关联值:Color.RED.value1
  • 按名称字符串查找:Color["RED"] 等价于 Color.RED
  • 按值查找:Color(1) 返回 Color.RED(自动映射,不创建新实例)

三种常用遍历方法

枚举类本身可直接迭代,返回的是规范成员(排除别名),顺序按定义顺序:

  • 直接 for 循环:最直观,适合逐个处理成员
    for color in Color: print(color.name, color.value)
  • 转为列表:获取所有成员对象组成的列表
    list(Color)[, , ...]
  • 显式提取名称或值集合:如 [c.name for c in Color][c.value for c in Color]

自动赋值与别名处理

避免手动编号重复,可用 auto() 自动生成递增整数:

  • from enum import Enum, auto
  • class Status(Enum): PENDING = auto(); PAID = auto() → 值分别为 1、2
  • 相同值的成员会被视为别名(如 BLUE = 1YELLOW = 1),BLUE is YELLOWTrue
  • 若需禁止别名,用 @unique 装饰器,重复值会触发 ValueError

扩展功能:带属性与方法的枚举

枚举成员可以携带额外数据,并封装逻辑:

  • __init__ 中接收构造参数,绑定实例属性
  • 使用 @property 定义只读计算属性(如行星质量、半径推导重力加速度)
  • 支持自定义 __str____repr__ 提升可读性
  • 若需支持整数比较或隐式转换,改用 IntEnum 继承

不复杂但容易忽略:枚举类不能被实例化,成员不可修改,也不支持大小比较(> 会报 TypeError),仅支持身份(is)和相等(==)判断。


# python  # ai  # 隐式转换  # red 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: C#如何调用原生C++ COM对象详解  googleplay官方入口在哪里_Google Play官方商店快速入口指南  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  如何确保西部建站助手FTP传输的安全性?  利用vue写todolist单页应用  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  EditPlus 正则表达式 实战(3)  Linux安全能力提升路径_长期防护思维说明【指导】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何在阿里云购买域名并搭建网站?  Python数据仓库与ETL构建实战_Airflow调度流程详解  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Python自动化办公教程_ExcelWordPDF批量处理案例  如何在阿里云高效完成企业建站全流程?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel如何创建自定义中间件?(Middleware代码示例)  如何快速搭建高效香港服务器网站?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel怎么实现验证码(Captcha)功能  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  phpredis提高消息队列的实时性方法(推荐)  如何在橙子建站上传落地页?操作指南详解  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel如何使用withoutEvents方法临时禁用模型事件  ,交易猫的商品怎么发布到网站上去?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  JS碰撞运动实现方法详解  网站制作软件免费下载安装,有哪些免费下载的软件网站?  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel如何发送系统通知?(Notification渠道示例)  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Android自定义listview布局实现上拉加载下拉刷新功能  制作企业网站建设方案,怎样建设一个公司网站?  浅谈redis在项目中的应用  使用C语言编写圣诞表白程序  如何用腾讯建站主机快速创建免费网站?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel如何实现API速率限制?(Rate Limiting教程)  Linux网络带宽限制_tc配置实践解析【教程】