当前位置: 首页 > 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;…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...