当前位置: 首页 > 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模块,你可以轻松创建枚举类,并享受它们带来的诸多便利。

相关文章:

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

在Python中&#xff0c;枚举类&#xff08;Enum&#xff09;用于表示一组常量&#xff0c;使代码更加清晰和易于维护。枚举类通过enum模块定义。以下是如何定义和使用枚举类的详细步骤。 定义枚举类 首先&#xff0c;你需要导入enum模块&#xff0c;然后定义一个枚举类。枚举…...

Java学习Day60:微服务总结!(有经处无火,无火处无经)

1、技术版本 jdk&#xff1a;17及以上 -如果JDK8 springboot&#xff1a;3.1及其以上 -版本2.x springFramWork&#xff1a;6.0及其以上 -版本5.x springCloud&#xff1a;2022.0.5 -版本格林威治或者休斯顿 2、模拟springcloud 父模块指定父pom <parent><…...

MySQL日期类型选择建议

我们平时开发中不可避免的就是要存储时间&#xff0c;比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间、用户下单时间等等。你会发现时间这个东西与我们开发的联系还是非常紧密的&#xff0c;用的好与不好会给我们的业务甚至功能带来很大的影响。所以…...

70B的模型做微调,使用A10*8的卡能够使用

使用 8 张 A10 GPU&#xff08;每张 A10 GPU 大约有 24 GB 的显存&#xff09;来微调 70B 参数的模型会比较困难&#xff0c;主要原因是显存不足。像 70B 参数量级的模型&#xff08;如 LLaMA-2 70B、BLOOM-176B&#xff09;通常需要几百 GB 以上的显存&#xff0c;仅加载模型就…...

将vscode的终端改为cygwin terminal

现在终端是默认的power shell&#xff0c;没有显示cygwin 接下来选择默认配置文件 找到cygwin的选项即可 然后提示可能不安全什么的&#xff0c;点是&#xff0c;就有了...

《ASP.Net Core技术内幕与项目实战》读书笔记_1

ch1 .NET Core入门 .NET介绍 这一章主要说的是.Net Core、.Net Framework、.Net Stanard三个之间的关系。通俗来讲就是Core是新出的、能跨平台&#xff0c;Framwork是老版的、不能跨平台&#xff0c;Standard是为了在Framework、Core、Xamarin中统一库的使用而定制的规范&#…...

【青牛科技】应用方案|D2587A高压大电流DC-DC

1、概述 D2587A稳压器是专为反激式、升压和正向转换器应用而设计的单片集成电路。该器件提供四种不同的输出电压版本&#xff1a;3.3V、5V、12V 和可调节电压。这些稳压器需要的外部元器件很少&#xff0c;因此具有成本效益&#xff0c;并且易于使用。该电源开关是一款5A NPN器…...

【测试】【Debug】pytest运行后print没有输出

import pytest def test_good():for i in range(1000):print(i)def test_bad():print(this should fail!)assert False比如上述程序&#xff0c;运行之后只能看到输出了’this should fail!&#xff1b;但是debug版的测试运行后又能看到test_good函数中的输出。 这是为什么呢&a…...

linux strace 查看程序异常问题总结

1&#xff0c;死锁问题 #include <stdio.h> #include <pthread.h> #include <unistd.h>pthread_mutex_t lock1 PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t lock2 PTHREAD_MUTEX_INITIALIZER;void* thread_func1(void* arg) {pthread_mutex_lock(&lo…...

8086汇编常见寄存器与指令

本文为学习书籍《汇编语言(第4版)》后的小结。 1、寄存器 序号寄存器描述1ax运算寄存器2bx地址寄存器&#xff0c;偏移地址3cx计数寄存器&#xff0c;loop的结束条件&#xff0c;jcxz的跳转条件4dx运算寄存器5cs段地址&#xff0c;指令执行段地址6ss段地址&#xff0c;栈的段地…...

Group By、Having用法总结(常见踩雷点总结—SQL)

Group By、Having用法总结 目录 Group By、Having用法总结一、 GROUP BY 用法二、 HAVING 用法三、 GROUP BY 和 HAVING 的常见踩雷点3.1 GROUP BY 选择的列必须出现在 SELECT 中&#xff08;&#x1f923;最重要的一点&#xff09;3.2 HAVING 与 WHERE 的区别3.3 GROUP BY 可以…...

Redis持久化机制——针对实习面试

目录 Redis持久化机制Redis为什么要有持久化机制&#xff1f;Redis持久化方式有哪些&#xff1f;AOF持久化工作原理是什么&#xff1f;有什么优缺点&#xff1f;AOF持久化工作原理AOF的优点AOF的缺点 RDB持久化工作原理是什么&#xff1f;有什么优缺点&#xff1f;RDB持久化工作…...

Windows系统服务器怎么设置远程连接?详细步骤

一、什么是Windows远程桌面连接? Windows远程桌面(Remote Desktop)功能使用户能够通过网络连接到另一台Windows计算机&#xff0c;实现远程操作。远程桌面非常适合系统管理员、技术支持人员以及那些需要远程工作的人&#xff0c;它允许用户以图形界面的方式访问远程计算机&…...

【Rust设计模式之建造者模式】

Rust设计模式之建造者模式 什么是建造者模式 什么是建造者模式 即将结构体属性方法与构建解离&#xff0c;使用专门的builder进行建造&#xff0c;说白了就是new和其他的方法分开&#xff0c;集中处理更方便。 直接上代码&#xff1a; #[derive(Debug)] struct children {nam…...

2024中国移动(南京)智算大会暨人工智能产业大会即将盛大启幕

11月9日&#xff0c;2024中国移动&#xff08;南京&#xff09;智算大会暨人工智能产业大会将在南京国际博览中心盛大举行。此次盛会将汇聚政界、学界与商界的顶尖力量&#xff0c;共同探讨智能计算与人工智能的未来发展方向&#xff0c;为智能计算与人工智能产业的发展注入新的…...

计算机毕业设计 | SpringBoot咖啡商城 购物采买平台 后台管理软件(附源码)

1&#xff0c;项目背景 1.1 当前的问题和困惑 系统稳定性&#xff1a; 在高并发访问时&#xff0c;商城系统容易出现卡顿、崩溃等问题&#xff0c;影响了用户体验和销售额。支付安全性&#xff1a; 支付环节存在潜在的安全隐患&#xff0c;如何确保支付过程的安全性和用户资金…...

CosyVoice文本转语音:轻松创造个性化音频

CosyVoice文本转语音&#xff1a;轻松创造个性化音频" 要实现一个使用通义语音合成模型CosyVoice将文字转换为音频的图形界面应用&#xff0c;可以使用Python的tkinter库来创建图形用户界面&#xff08;GUI&#xff09;&#xff0c;并使用requests库来调用CosyVoice的API…...

法语nous sommes

法语短语 “nous sommes” 的词源可以追溯到拉丁语&#xff0c;具体分析如下&#xff1a; 1. “Nous” 的词源&#xff1a; “Nous” 是法语中表示 “我们” 的人称代词&#xff0c;源自拉丁语的 “nos”&#xff0c;它表示 “我们” 的意思。 拉丁语 “nos” 是第一人称复数…...

《化学进展》

《化学进展》主要栏目有&#xff1a;综述&#xff0c;评论&#xff0c;中国化学印记&#xff0c;Mini Accounts等。本刊可供化学及相关学科领域的科研、教学、决策管理人员及研究生阅读。 《化学进展》投稿指南稿件要求   &#xff08;1&#xff09;本刊仅接受综述与评论性的…...

CNN和RCNN的关系和区别

RCNN&#xff08;Region-based Convolutional Neural Network&#xff09;和 CNN&#xff08;Convolutional Neural Network&#xff09;是两种不同的神经网络架构&#xff0c;它们在应用和结构上有所不同。以下是它们之间的主要区别&#xff1a; 1. 基本概念 CNN&#xff08;…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...