探秘 Python 枚举类型:从基础到实战的深度指南
探秘 枚举类型从基础到实战的深度指南深入介绍本文涵盖Enum、Flag等多种枚举类型的枚举种类, 从基本概念开始介绍, 再介绍创建方式, 接着介绍成员访问, 然后介绍比较运算等方面作出全面详细解析, 结合丰富示例与直观图表, 助力读者全面掌握枚举知识, 提升代码的可读性与可维护性。枚举基础概念有这么一种东西, 它叫枚举Enum, 它是一组符号名称, 这些符号名称绑定到唯一值, 它的用途是表示有限个可选值的集合。它在功能方面和全局变量类似, 不过它有着更好的 repr()输出, 有着分组特性, 还有类型安全性。于实际的编程情形里, 当某特定变量的取值范畴固定且具备有限性时, 枚举便发挥作用了。像用来展现一周之中的每一天, 又或是RGB颜色模型之中的基础颜色等这类场景。枚举的创建与基本使用进行枚举创建这件事是比较简单的, 也就是去定义一个类, 此类是继承自Enum的就可以达成目的。对于成员名而言, 建议采取大写的形式, 目的在于表明这是常量。from enum import Enum class Weekday(Enum): MONDAY 1 TUESDAY 2 WEDNESDAY 3 THURSDAY 4 FRIDAY 5 SATURDAY 6 SUNDAY 7 class Color(Enum): RED 1 GREEN 2 BLUE 3枚举成员具备某些有用的属性, 其中name属性会返回成员呈现的名称, 而value属性则会返回与其对应的所具的值。# 通过值访问 print(Weekday(3)) # 通过名称访问 print(Color[RED])进行枚举的成员的repr(), 会将枚举名称、成员名称以及值显示出来, str()呢, 仅仅会把枚举名称和成员名称显示出来。枚举的扩展与行为添加枚举类能够增添方法, 举例来说, 给枚举增添一个能够从date对象把相匹配的枚举成员找出来的方法:from datetime import date class Weekday(Enum): MONDAY 1 TUESDAY 2 WEDNESDAY 3 THURSDAY 4 FRIDAY 5 SATURDAY 6 SUNDAY 7 classmethod def from_date(cls, date): return cls(date.isoweekday()) print(Weekday.from_date(date.today()))Flag枚举Flag枚举被用于表示那种能够包含多个值的情形, 它是继承自己Flag类的, 并且其成员值一般来讲是2的幂。from enum import Flag class Weekday(Flag): MONDAY 1 TUESDAY 2 WEDNESDAY 4 THURSDAY 8 FRIDAY 16 SATURDAY 32 SUNDAY 64 # 单个选择 first_week_day Weekday.MONDAY # 多个成员合并 weekend Weekday.SATURDAY | Weekday.SUNDAYFlag枚举可以进行迭代方便处理多个值的情况 。自动设定枚举值若具体的枚举值所处特定情形下并非重点关注对象, 那么能够运用auto()这种方式, 去凭借自动的机制来进行值的安置。from enum import Enum, auto class Color(Enum): RED auto() BLUE auto() GREEN auto() print([member.value for member in Color])枚举成员的比较运算依照 ID 开展比较的是枚举成员不具有对有序比较的支持。基于成员自身来作判断进而实施相等性比较。比较操作示例结果同一性比较Color.RED is Color.REDTrue同一性比较Color.RED is Color.BLUEFalse相等性比较Color.BLUE Color.REDFalse相等性比较Color.BLUE Color.BLUETrue与非枚举值比较Color.BLUE 2False其他特性有重复成员与别名, 在枚举里, 成员名不能重复, 然而一个值能够有多个名称, 这些名称彼此是互为别名的。要确保值唯一, 运用()装饰器能够确保枚举值唯一, 防止重复值出现。迭代枚举成员时, 直接迭代不会列出别名, 需用属性来获取包含别名的所有成员的信息。合法成员与属性方面, 枚举类可以包含普通方法与特殊方法, 不过名称以单下划线开头而且结尾的是保留相关内容的, 特殊方法以及描述符不会成为枚举成员。受限的子类化: 一般来说定义了成员的枚举类不太能够被子类化, 然而, 那些未定义成员的枚举类是可以被子类化的。数据类支持: 在继承的时候, ()会呈现出特殊的表现情况, 借助reprFalse这个参数能够使用标准的repr()。打包与解包: 枚举类型能够被打包以及解包, 不过存在一定的限制条件, 像必须要在模块的最高层级进行定义, 还能够通过定义()去变更打包的方式。函数式 API: Enum类给出函数式 API, 通过调用能够创建枚举, 需要留意模块名以及的设置。派生枚举, 它属于Enum的变种, 并且还是int的子类, 其所含成员能够和整数开展比较。重点知识点予以扩展, 枚举在状态机里的应用一用来管理对象于不同状态下行为的, 一种常用设计模式是状态机, 枚举在状态机里颇为有用, 能够清晰界定各种状态, 比如, 存在一个简单的网络连接状态机:from enum import Enum class NetworkStatus(Enum): DISCONNECTED 1 CONNECTING 2 CONNECTED 3 DISCONNECTING 4 class NetworkConnection: def __init__(self): self.status NetworkStatus.DISCONNECTED def connect(self): if self.status NetworkStatus.DISCONNECTED: self.status NetworkStatus.CONNECTING # 模拟连接操作 self.status NetworkStatus.CONNECTED else: print(f当前状态为 {self.status.name}无法连接) def disconnect(self): if self.status NetworkStatus.CONNECTED: self.status NetworkStatus.DISCONNECTING # 模拟断开操作 self.status NetworkStatus.DISCONNECTED else: print(f当前状态为 {self.status.name}无法断开) conn NetworkConnection() conn.connect() conn.disconnect()二结合枚举与数据库操作于数据库开展操作期间, 枚举得以专门用来展现数据库的各个表内部的某些个字段所具备的取值范畴, 举例而言, 有一个用户角色表, 其角色类型是限定于数量有限的几种情况:from enum import Enum import sqlite3 class UserRole(Enum): ADMIN 1 USER 2 GUEST 3 # 创建数据库表 conn sqlite3.connect(example.db) cursor conn.cursor() cursor.execute(CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, role INTEGER)) # 插入数据 user1 (Alice, UserRole.ADMIN.value) cursor.execute(INSERT INTO users (name, role) VALUES (?,?), user1) # 查询数据 cursor.execute(SELECT * FROM users WHERE role ?, (UserRole.ADMIN.value,)) result cursor.fetchone() print(result) conn.commit() conn.close()三在配置文件解析中的使用当对配置文件做解析操作的时候, 枚举能够起到协助作用, 以此来保证配置项所具有的值是符合规定的, 是合理的。就像举例来说, 在一个用于游戏的配置文件里, 关于图形质量那是存在着几种预先设定好的选项的:from enum import Enum class GraphicsQuality(Enum): LOW 1 MEDIUM 2 HIGH 3 # 模拟读取配置文件 config { graphics_quality: HIGH } # 解析配置 quality GraphicsQuality[config[graphics_quality]] print(f当前图形质量设置为: {quality.name})总结具有枚举类型, 这为开发者给予了一种强大且便利的方法, 用以处理存在有限个可选值的场景, 借助使用枚举, 可让代码更为清晰、易于阅读, 还能增强类型安全性, 从基础的枚举创建、对成员的访问, 到复杂的扩展、比较运算以及在各类实际场景里的应用, 枚举均展现出了它独特的优势。掌握枚举的运用方式, 能够提高代码的质量以及可维护性, 使开发进程更加高效。TAG 、枚举、Enum、Flag、官方所给出的文档, 其名为官方文档 - Enum 指南, 它给出了超级权威超详细的知识点方面的说明, 这可是深入下去进行学习时极为重要的参考。

相关新闻

高通迈入 2 纳米时代:双旗舰芯片拉开安卓性能新序幕

高通迈入 2 纳米时代:双旗舰芯片拉开安卓性能新序幕

高通官宣,将在 9 月骁龙技术峰会上正式发布两款台积电 2 纳米制程旗舰芯片:第六代骁龙 8 至尊版与第六代骁龙 8 超级至尊版,标志安卓旗舰正式进入 2 纳米工艺时代。双芯片策略会带来哪些差异,对手机行业和普通消费者又意味着什么&…

2026/8/23 23:37:45 阅读更多 →
使用Selenium爬取目标网站被识别的解决之法

使用Selenium爬取目标网站被识别的解决之法

在开展网络数据抓取以及爬取之际,它是一个较为常用的工具, 其能够模拟人类用户的行为, 以自动化的方式去操作浏览器来对页面进行访问, 进而提取数据。然而, 伴随网站针对爬虫的检测能力持续提高, 众多爬虫程序于运行进程中常常会碰到被目标网站识别的状况, 致使爬取…

2026/8/23 23:37:45 阅读更多 →
基于PHP、asp.net、java、Springboot、SSM、vue3的高校校园志愿者服务管理平台的设计与实现-计算机专业毕业设计选题题目

基于PHP、asp.net、java、Springboot、SSM、vue3的高校校园志愿者服务管理平台的设计与实现-计算机专业毕业设计选题题目

目录 可选框架 可选语言 内容 可选框架 J2EE、MVC、vue3、spring、springmvc、mybatis、SSH、SpringBoot、SSM、django 可选语言 java、web、PHP、asp.net、javaweb、C#、python、 HTML5、jsp、ajax、vue3 内容 随着全国人民生活水平和公民素质的提高,乐意加…

2026/8/23 23:36:45 阅读更多 →

最新新闻

Paper2GUI Figma 界面设计新手教程:把 AI 工具界面做得开箱即用

Paper2GUI Figma 界面设计新手教程:把 AI 工具界面做得开箱即用

Paper2GUI Figma 界面设计新手教程:把 AI 工具界面做得开箱即用 【免费下载链接】paper2gui Convert AI papers to GUI,Make it easy and convenient for everyone to use artificial intelligence technology。让每个人都简单方便的使用前沿人工智能技术…

2026/8/24 10:01:24 阅读更多 →
RPCS3汉化补丁轻松跑通指南:新手半小时上手游玩

RPCS3汉化补丁轻松跑通指南:新手半小时上手游玩

RPCS3汉化补丁轻松跑通指南:新手半小时上手游玩 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 装好之后,你得到的是一台能跑PS3游戏的中文模拟器:游戏里的菜单…

2026/8/24 10:01:24 阅读更多 →
构建智能评估体系:AgentFuel框架驱动时间序列分析动态评估

构建智能评估体系:AgentFuel框架驱动时间序列分析动态评估

1. 项目概述:当时间序列分析遇上智能体燃料最近在搞时间序列数据分析,发现一个挺有意思的痛点:模型评估(Eval)这事儿,太死板了。传统的评估脚本,要么是写死的指标计算,要么就是一堆冷…

2026/8/24 10:01:24 阅读更多 →
AI Agent指令自动形式化:从自然语言到策略即代码的实践

AI Agent指令自动形式化:从自然语言到策略即代码的实践

1. 从“人话”到“机器码”:指令自动形式化的核心挑战最近在折腾AI Agent和策略管理时,我遇到了一个非常具体且挠头的问题:如何让业务人员用自然语言描述的规则,比如“只有项目负责人才能审批金额超过10万的合同”,自动…

2026/8/24 10:01:24 阅读更多 →
构建AI编码代理的工程化自治循环:从线性指令到自动化工作流

构建AI编码代理的工程化自治循环:从线性指令到自动化工作流

1. 项目概述:告别“手把手”式编码代理协作如果你最近用过GitHub Copilot、Cursor或者Claude Code,大概率经历过这种场景:你写下一行注释,AI助手生成了一段代码,但结果不尽如人意。于是你开始“手把手”地教它&#xf…

2026/8/24 10:01:23 阅读更多 →
CT系统参数标定与滤波反投影重建:从数学建模到工业成像实践

CT系统参数标定与滤波反投影重建:从数学建模到工业成像实践

1. 项目概述:从一道赛题到工业成像的实践桥梁看到“CT系统参数标定及反投影重建成像”这个标题,很多从事医学影像、无损检测或者计算成像的朋友可能会心一笑,这几乎是入门领域绕不开的经典课题。而加上“2017数模国赛论文A298编程分析”的后缀…

2026/8/24 10:00:23 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →