首页 > 编程语言 >Python中枚举类型的详解

Python中枚举类型的详解

时间:2023-12-31 22:12:15浏览次数:33  
标签:ColorEnum ClientTypeEnum Python 类型 枚举 详解 USER print

1. 枚举类型的定义和简单使用

在 Python 中,枚举类型可以通过使用 enum 模块来实现。下面是一个使用枚举类型的示例:

from enum import Enum


# 定义一个枚举类型
class ColorEnum(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3


# 使用枚举类型
print(ColorEnum.RED)            # 输出:ColorEnum.RED
print(ColorEnum.RED.name)       # 输出:RED
print(ColorEnum.RED.value)      # 输出:1


# 迭代枚举类型
for color in ColorEnum:
    print(color)
    # 输出:
    #   ColorEnum.RED
    #   ColorEnum.GREEN
    #   ColorEnum.BLUE
  • 导入一个 Enum 类,并定义一个名为 ColorEnum 的枚举类型,枚举类型中的每个成员都为类的属性,因此要访问枚举成员,需要通过 . 运算符来访问。
  • 通过 ColorEnum.RED 来访问枚举成员,并用 .name 属性来获取成员的名称,使用 .value 属性来获取成员的值。
  • 使用 for 循环来迭代枚举类型中的所有成员
  • 为什么 ColorEnum 类可以在 for 循环上遍历呢?
    这是因为 ColorEnum 类继承了 Enum 类,而 Enum 类内部实现了 __iter__ 方法,使得 ColorEnum 的类属性可以通过 for 循环来迭代枚举类型中的所有成员。

2. 枚举类型的实际使用(使用枚举代替数字来进行分类)

如果在项目中需要通过不同的数字来判断不同的类别,那么可以通过使用枚举类型来表示这些数字,这时就可以将数字转换为相应的枚举成员来处理。

例如一个网站有 邮箱手机微信小程序微信公众号 这几种注册方式,用户注册时,用户请求传递过来数字,在后端处理的时候,总不能直接使用 100101 这样的数字来区分不同的注册方式吧?这个时候枚举就起到了作用,我们将使用枚举类型来表示这些数字。

from enum import Enum


# 定义一个枚举类型
class ClientTypeEnum(Enum):
    USER_EMAIL = 100            # 邮箱
    USER_MOBILE = 101           # 手机
    USER_MINA = 200             # 微信小程序
    USER_WX = 201               # 微信公众号


print(ClientTypeEnum(100))
print(ClientTypeEnum(101))
try:
    print(ClientTypeEnum(400))
except ValueError as e:
    print(f"ValueError: {e}")
    # raise e
pass

# 结果:
# ClientTypeEnum.USER_EMAIL
# ClientTypeEnum.USER_MOBILE
# ValueError: 400 is not a valid ClientTypeEnum

根据不同的注册方式,匹配不同的处理函数:

from enum import Enum


# 定义一个枚举类型
class ClientTypeEnum(Enum):
    USER_EMAIL = 100            # 邮箱
    USER_MOBILE = 101           # 手机号
    USER_MINA = 200             # 微信小程序
    USER_WX = 201               # 微信公众号


# 验证输入的类型
def validate_type(value):
    try:
        client = ClientTypeEnum(value)
        return client
    except ValueError as e:
        raise e


# 根据匹配的值进行相应的函数处理
def handle_client_register(client):
    # 匹配方式一
    # promise = {
    #     ClientTypeEnum.USER_EMAIL: __register_user_by_email
    # }

    # 匹配方式二
    match client:
        case ClientTypeEnum.USER_EMAIL:
            # __register_user_by_email
            print("通过邮箱注册")
        case ClientTypeEnum.USER_MOBILE:
            print("通过手机号注册")
        case ClientTypeEnum.USER_MINA:
            print("通过微信小程序注册")
        case ClientTypeEnum.USER_WX:
            print("通过微信注册")
        case _:
            print("未匹配到任何模式")


request_value = 100                         # 用户注册时传过来的值
client = validate_type(request_value)       # 验证注册类型以及转换为枚举
handle_client_register(client)              # 匹配对应的枚举项,执行不同的处理函数


# 结果:
# 通过邮箱注册

标签:ColorEnum,ClientTypeEnum,Python,类型,枚举,详解,USER,print
From: https://www.cnblogs.com/wanghuizhao/p/17938120

相关文章

  • Python 装饰器
    Python装饰器python装饰器的本质是:仅以一个函数为参数,并返回一个函数。且看以下案例:defdecorator(f): print(f.__name__) returnf#1@decoratordeffun(): print("runfun")#2fun=decorator(fun)以上两种写法是等价的;装饰器函数会在被装饰的函数定义完成时......
  • Python教程(19)——python异常处理
    什么是异常在计算机编程中,异常(Exception)是指在程序执行过程中发生的错误或异常情况。当出现异常时,程序无法正常继续执行,因此需要采取一些特殊的措施来处理异常,以防止程序崩溃或产生意外结果。异常可以在程序中的任何地方发生,可能是由错误的输入、无效的操作、资源不足、硬件问题......
  • 【Python爬虫课程设计】大数据分析——东方财富石头科技股市数据分析
    一、选题课程背景在当今信息化时代,数据已成为驱动各行各业发展的重要力量。股市作为经济的晴雨表,其数据更是备受关注。东方财富网作为国内知名的财经网站,拥有海量的股市数据。随着大数据技术的不断发展,数据在各行各业的应用越来越广泛。股市作为经济的核心,其数据的价值不言而喻。......
  • Python趣味入门13:类中的各种变量
    小牛叔带你飞越类的门槛其中我们已知道定义变量在类中就表示为属性。但是在不同的位置定义变量会有不同的作用,并且采用不同的命名方式,也会让变量具有不同的作用本文假设有一个类指南针(compass),可想象成某个地图游戏中帮助主角寻找方向,也是本节主要的示例。1.类属性与实例属性c......
  • 一键打包,随时运行,Python3项目虚拟环境一键整合包的制作(Venv)
    之前我们介绍了如何使用嵌入式Python3环境给项目制作一键整合包,在使用嵌入式Python环境时,通常是作为另一个应用程序的一部分,而Python3虚拟环境是为了在开发过程中隔离项目所需的Python环境。虚拟环境允许我们在同一台计算机上的不同项目中使用不同的Python版本和软件包,而......
  • Reinforcement Learning in Python:实践指南
    1.背景介绍人工智能(ArtificialIntelligence,AI)是一门研究如何让计算机自主地学习、理解、推理和决策的科学。人工智能的一个重要分支是强化学习(ReinforcementLearning,RL),它研究如何让计算机通过与环境的互动来学习如何做出最佳决策。强化学习的目标是让计算机能够在不同的状态......
  • Python 深度学习:TensorFlow 和 PyTorch 实践
    1.背景介绍深度学习是人工智能领域的一个重要分支,它通过模拟人类大脑中的神经网络学习和决策,使计算机能够从大量数据中自动发现模式和关系。深度学习已经应用于图像识别、自然语言处理、语音识别、机器翻译等多个领域,取得了显著的成果。TensorFlow和PyTorch是目前最流行的深度学......
  • Python Machine Learning Projects: Building RealWorld Applications
    1.背景介绍人工智能和机器学习技术在过去的几年里取得了巨大的进步,这使得许多实际应用成为可能。这本书《16.PythonMachineLearningProjects:BuildingReal-WorldApplications》旨在帮助读者理解这些实际应用,并提供有关如何使用Python编写机器学习代码的实践指南。本书的目......
  • python学习笔记5(保留字、标识符、变量、基本数据类型)
    上一节学习了print复杂语法、input、注释、代码缩进本节内容:(一)保留字特殊意义的词,区分大小写#查看保留字importkeywordprint(keyword.kwlist)(二)标识符1、名字,组成:字母、下划线和数字数字不能开头注意不能有殊殊字符一般不以_开头,有特殊意义一般不以中文开头2、代码规范模块名称,a......
  • DNS原理及解析过程详解
    相信大家在平时工作中都离不开DNS解析,DNS解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。下面我们将详细的给大家讲解DNS的相关知识。什么是DNSDNS就是域名系统,是因特网中的一项核心服务,是用于实现域......