当前位置: 首页 > wzjs >正文

济南网站建设 济南货梯免费b站在线观看人数在哪

济南网站建设 济南货梯,免费b站在线观看人数在哪,上海网站备案注销,wordpress作企业网站好吗本文深入介绍 Python 的枚举类型,从基本概念、创建方式到成员访问、比较运算等方面进行详细解析,涵盖Enum、Flag、IntEnum等多种枚举类型,结合丰富示例与直观图表,助力读者全面掌握枚举知识,提升代码的可读性与可维护性…

本文深入介绍 Python 的枚举类型,从基本概念、创建方式到成员访问、比较运算等方面进行详细解析,涵盖EnumFlagIntEnum等多种枚举类型,结合丰富示例与直观图表,助力读者全面掌握枚举知识,提升代码的可读性与可维护性。

目录

枚举基础概念

枚举的创建与基本使用

枚举的扩展与行为添加

Flag枚举

自动设定枚举值

枚举成员的比较运算

枚举的其他特性

重点知识点扩展

(一)枚举在状态机中的应用

(二)结合枚举与数据库操作

(三)在配置文件解析中的使用

总结


枚举基础概念

枚举(Enum)是一组绑定到唯一值的符号名称,用于表示有限个可选值的集合。它在功能上类似全局变量,但具备更好的repr()输出、分组特性和类型安全性 。 在实际编程中,当某个变量的取值范围固定且有限时,枚举就派上用场了。比如表示一周中的每一天,或是 RGB 颜色模型中的基本颜色等场景。

枚举的创建与基本使用

创建枚举很简单,定义一个继承自Enum的类即可。成员名建议采用大写形式,以表示这是常量

from enum import Enum
​
​
class Weekday(Enum):MONDAY = 1TUESDAY = 2WEDNESDAY = 3THURSDAY = 4FRIDAY = 5SATURDAY = 6SUNDAY = 7
​
​
class Color(Enum):RED = 1GREEN = 2BLUE = 3

枚举成员有一些有用的属性,name属性返回成员的名称,value属性返回其对应的值 。

# 通过值访问
print(Weekday(3))  
# 通过名称访问
print(Color['RED'])  

枚举成员的repr()会显示枚举名称、成员名称和值;str()则只显示枚举名称和成员名称 。

枚举的扩展与行为添加

枚举类可以添加方法。例如,为Weekday枚举添加一个从date对象获取对应枚举成员的方法:

from datetime import date
​
​
class Weekday(Enum):MONDAY = 1TUESDAY = 2WEDNESDAY = 3THURSDAY = 4FRIDAY = 5SATURDAY = 6SUNDAY = 7
​@classmethoddef 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 = 1TUESDAY = 2WEDNESDAY = 4THURSDAY = 8FRIDAY = 16SATURDAY = 32SUNDAY = 64
​
​
# 单个选择
first_week_day = Weekday.MONDAY
# 多个成员合并
weekend = Weekday.SATURDAY | Weekday.SUNDAY

Flag枚举可以进行迭代,方便处理多个值的情况 。

自动设定枚举值

当具体的枚举值不重要时,可以使用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

枚举的其他特性

  1. 重复成员与别名:枚举中成员名不能重复,但一个值可以有多个名称,这些名称互为别名 。

  2. 确保值唯一:使用unique()装饰器可以确保枚举值唯一,避免重复值的出现 。

  3. 迭代枚举成员:直接迭代枚举成员不会列出别名,__members__属性可用于获取包含别名的所有成员信息 。

  4. 合法成员与属性:枚举类可包含普通方法和特殊方法,但名称以单下划线开头和结尾的是保留的,特殊方法和描述符不会成为枚举成员 。

  5. 受限的子类化:定义了成员的枚举类通常不能被子类化,未定义成员的枚举类可以被子类化 。

  6. 数据类支持:从dataclass继承时,__repr__()会有特殊表现,可通过repr=False参数使用标准的repr()

  7. 打包与解包:枚举类型可被打包和解包,但有一定限制,如必须在模块最高层级定义,可通过定义__reduce_ex__()修改打包方式 。

  8. 函数式 APIEnum类提供函数式 API,可通过调用创建枚举,需注意模块名和qualname的设置 。

  9. 派生枚举 - IntEnumIntEnumEnum的变种,同时也是int的子类,其成员可与整数进行比较 。

重点知识点扩展

(一)枚举在状态机中的应用

状态机是一种常用的设计模式,用于管理对象在不同状态下的行为。枚举在状态机中非常有用,可以清晰地定义各种状态。例如,一个简单的网络连接状态机:

from enum import Enum
​
​
class NetworkStatus(Enum):DISCONNECTED = 1CONNECTING = 2CONNECTED = 3DISCONNECTING = 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.CONNECTEDelse:print(f"当前状态为 {self.status.name},无法连接")
​def disconnect(self):if self.status == NetworkStatus.CONNECTED:self.status = NetworkStatus.DISCONNECTING# 模拟断开操作self.status = NetworkStatus.DISCONNECTEDelse:print(f"当前状态为 {self.status.name},无法断开")
​
​
conn = NetworkConnection()
conn.connect()
conn.disconnect()

(二)结合枚举与数据库操作

在数据库操作中,枚举可以用于表示数据库表中的某些字段的取值范围。例如,一个用户角色表,角色类型是有限的几种:

#--- coding:utf-8 ---
from enum import Enum
import sqlite3class UserRole(Enum):ADMIN = 1USER = 2GUEST = 3# 创建数据库表
conn = sqlite3.connect('example.db')
cursor = conn.cursor()# 查询数据库表中是否有 users 表, 如果没有则创建
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='users'")
# 如果没有则创建
if cursor.fetchone() is None: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 = 1MEDIUM = 2HIGH = 3
​
​
# 模拟读取配置文件
config = {'graphics_quality': 'HIGH'
}
​
# 解析配置
quality = GraphicsQuality[config['graphics_quality']]
print(f"当前图形质量设置为: {quality.name}")

总结

Python 的枚举类型为开发者提供了一种强大且方便的方式来处理有限个可选值的场景。通过使用枚举,可以使代码更加清晰、易读,并且增强类型安全性。从基本的枚举创建、成员访问,到复杂的扩展、比较运算以及在各种实际场景中的应用,枚举都展现出了其独特的优势。掌握枚举的使用方法,能够提升代码的质量和可维护性,让开发过程更加高效。

TAG: Python、枚举、Enum、Flag、IntEnum

官方文档:Python 官方文档 - Enum 指南,提供了最权威和详细的知识点说明,是深入学习的重要参考。

http://www.dtcms.com/wzjs/395729.html

相关文章:

  • 博客网站模版网站被百度收录
  • wordpress电商模板优化方案模板
  • 苏州园区做网站公司网站seo优化是什么意思
  • wordpress主机404网站seo外链
  • 虚拟电脑可以做网站吗搜狗站长管理平台
  • y2学年做的租房网站seo一个月工资一般多少
  • 亚马逊中国官方网站成品网站货源1688在线
  • 四川成都百度推广seo网站推广是什么意思
  • 公司制作一个网站南召seo快速排名价格
  • 做网站需要Excel表格吗2020最新推广方式
  • 网站域名实名认证今日国际军事新闻最新消息
  • cdn如何做网站备案yw77731域名查询
  • 关于网站制作报价专业做网站建设的公司
  • 宣传册样式北京seo公司
  • 网站源码防盗原理百度seo简爱
  • 大型网站建设完全教程营销软文小短文
  • 白山网站建设东莞市网络seo推广企业
  • 个人网站备案名称百度推广外推联系方式
  • 运营是做什么的工作宁波seo智能优化
  • 阿里巴巴企业网站建设潍坊网站建设咨询
  • 天津武清做网站域名批量注册查询
  • 阿里云 oss做网站新品怎么推广效果最好
  • 国外设计网站导航品牌营销活动策划方案
  • 网页设计作业 个人网站石家庄网站建设培训
  • 微擎做的网站好排名吗百度一下你就知道官方
  • 关于网站建设的论文题目环球资源网官方网站
  • 如何管理wordpress网站模板优化seo软件
  • 手机网站后台管理系统嘉兴网站建设
  • 大专公司网站建设毕业论文免费舆情网站下载大全最新版
  • 昆明做网站建设怎么样银川seo优化