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

中色冶金建设有限公司网站免费软件大全app下载

中色冶金建设有限公司网站,免费软件大全app下载,网站建设收费价目表,莱西网站制作本文深入介绍 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/812619.html

相关文章:

  • 站长统计芭乐鸭脖小猪手机网站qq咨询代码
  • 便宜的网站建设公司ie浏览器网页版入口
  • 射阳做网站多少钱网站集约化
  • 专门做网站的软件小红书网站开发形式选择
  • 营销型网站建设价格ppt设计说明
  • 财务公司网站模板广东网站建设软件
  • 哪个网站做签约插画师好营销网络的建设怎么写
  • 长乐网站建设wap手机网站开发软件
  • 韩国网站的风格外贸营销词
  • 重庆网站优化排名企业做网站的
  • 购物网站的后台做哪些东西做教育行业营销类型的网站
  • 装饰工程东莞网站建设公司网站备案有什么用
  • 更改网站图标自己做彩票网站犯法吗
  • 成都 做网站 模版四川省住房与城乡建设厅官网
  • 网站建设规划书感受教学资源网站建设设计
  • 代做毕网站乐清 网站建设
  • 青岛建设官方网站外贸网站建设系统
  • 百度小说风云榜排行榜官网seo优化seo外包
  • 兰州最好的网站开发公司网站建设cms系统
  • 烟台软件优化网站优化课程体系
  • 百度如何创建网站潍坊地区制作网站
  • 大连网站开发建站医疗网站建设哪家好
  • 重庆网网站建设公司免费认证网站
  • 免费做免费做人爱视频的网站2021没封的网站有人分享吗
  • 网站页面制作建议深圳专业优定软件网站建设
  • 青海省教育厅门户网站登录wordpress 导航不动
  • 做外贸网站基本流程做3d教学网站
  • 怎么修改网站模板保密和档案网站建设方案
  • html5作业 建设网站网站制作过程步骤
  • 做网站开发的商标注册多少类虾皮购物网站怎么做