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

Python教程:python枚举类定义和使用

在Python中,枚举类(Enum)用于表示一组常量,使代码更加清晰和易于维护。枚举类通过enum模块定义。以下是如何定义和使用枚举类的详细步骤。

定义枚举类

首先,你需要导入enum模块,然后定义一个枚举类。枚举类中的每个成员都是该类的实例,并且每个成员都有一个唯一的名称和值。

from enum import Enum  class Color(Enum):  RED = 1  GREEN = 2  BLUE = 3

在这个例子中,Color是一个枚举类,它有三个成员:RED、GREEN和BLUE,每个成员都有一个对应的整数值。

使用枚举类

你可以像使用普通类一样使用枚举类。枚举类的成员可以通过类名来访问,并且每个成员都有name和value属性。

# 访问枚举成员  
print(Color.RED)          # 输出: Color.RED  
print(Color.RED.name)     # 输出: RED  
print(Color.RED.value)    # 输出: 1  # 遍历枚举成员  
for color in Color:  print(color.name, color.value)  
# 输出:  
# RED 1  
# GREEN 2  
# BLUE 3

枚举的比较和身份

枚举成员可以进行比较和身份检查。

# 比较枚举成员  
print(Color.RED == Color.RED)   # 输出: True  
print(Color.RED == Color.GREEN) # 输出: False  # 身份检查  
print(Color.RED is Color(1))    # 输出: True

枚举成员的唯一性

枚举成员的值在枚举类中必须是唯一的。如果尝试定义两个具有相同值的成员,将会引发ValueError。

class InvalidColor(Enum):  RED = 1  ANOTHER_RED = 1  # 这将引发 ValueError

自定义枚举值

枚举成员的值不必是整数,它们可以是任何不可变类型(例如字符串、元组等)。

class Status(Enum):  PENDING = 'pending'  APPROVED = 'approved'  REJECTED = 'rejected'  print(Status.PENDING.value)  # 输出: pending

枚举的自动方法和属性

枚举类有一些有用的方法和属性:

members:返回包含所有成员名称和成员的字典。
iter():允许枚举类被迭代。

# 获取所有成员  
members = Color.__members__  
print(members)  # 输出: {'RED': <Color.RED: 1>, 'GREEN': <Color.GREEN: 2>, 'BLUE': <Color.BLUE: 3>}  # 检查成员是否存在  
print('RED' in Color.__members__)  # 输出: True  
print('YELLOW' in Color.__members__)  # 输出: False

示例:使用枚举类处理状态

假设你有一个订单处理系统,可以使用枚举类来表示订单的状态。

class OrderStatus(Enum):  CREATED = 1  IN_PROGRESS = 2  COMPLETED = 3  CANCELLED = 4  # 示例订单  
order = {  'id': 123,  'status': OrderStatus.CREATED  
}  # 检查订单状态  
if order['status'] == OrderStatus.CREATED:  print("Order has been created.")  
elif order['status'] == OrderStatus.COMPLETED:  print("Order has been completed.")  
else:  print("Order is in another status.")

总结
枚举类在Python中提供了一种简洁且类型安全的方式来定义和使用常量集。通过enum模块,你可以轻松创建枚举类,并享受它们带来的诸多便利。

http://www.lryc.cn/news/479186.html

相关文章:

  • Java学习Day60:微服务总结!(有经处无火,无火处无经)
  • MySQL日期类型选择建议
  • 70B的模型做微调,使用A10*8的卡能够使用
  • 将vscode的终端改为cygwin terminal
  • 《ASP.Net Core技术内幕与项目实战》读书笔记_1
  • 【青牛科技】应用方案|D2587A高压大电流DC-DC
  • 【测试】【Debug】pytest运行后print没有输出
  • linux strace 查看程序异常问题总结
  • 8086汇编常见寄存器与指令
  • Group By、Having用法总结(常见踩雷点总结—SQL)
  • Redis持久化机制——针对实习面试
  • Windows系统服务器怎么设置远程连接?详细步骤
  • 【Rust设计模式之建造者模式】
  • 2024中国移动(南京)智算大会暨人工智能产业大会即将盛大启幕
  • 计算机毕业设计 | SpringBoot咖啡商城 购物采买平台 后台管理软件(附源码)
  • CosyVoice文本转语音:轻松创造个性化音频
  • 法语nous sommes
  • 《化学进展》
  • CNN和RCNN的关系和区别
  • Chromium 进程降权和提权模拟示例c++
  • 【测试语言篇一】Python进阶篇:内置容器数据类型
  • 湘潭大学软件工程专业选修 SOA 期末考试复习(二)
  • 改进的正弦余弦算法复现
  • Day13杨辉三角
  • 【c知道】Hadoop工作原理。
  • React.lazy() 懒加载
  • 【自学笔记】神经网络(1)
  • c#————扩展方法
  • 前向-后向卡尔曼滤波器(Forward-Backward Kalman Filter)资料汇总
  • 云集电商:如何通过 OceanBase 实现降本 87.5%|OceanBase案例