广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Python中的枚举类型
  • 907
分享到

详解Python中的枚举类型

2024-04-02 19:04:59 907人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录什么是枚举类型为什么要使用枚举如何使用枚举从字典创建枚举最后的话你好,我是 征哥,今天分享一下 python 中的枚举类型,为什么需要枚举类型,及如何使用。 什么是枚举类型 枚举

你好,我是 征哥,今天分享一下 python 中的枚举类型,为什么需要枚举类型,及如何使用。

什么是枚举类型

枚举(Enum)是一种数据类型,是绑定到唯一值的符号表示。您可以使用它来创建用于变量和属性的常量集。它们类似于全局变量,但是,它们提供了更有用的功能,例如分组和类型安全Python 在 3.4 版本中添加了标准库 enum。

为什么要使用枚举

使用枚举有以下好处:

代码更容易阅读,更容易维护。

减少由转换或错误输入引起的 bug。

使将来修改值变得更容易。

如何使用枚举

以我们最熟悉的性别为例,先创建一个枚举类型:

>>> from enum import Enum
>>> class Gender(Enum):
...     男 = 1
...     女 = 0
...     未知 = 2
...
>>> Gender
<enum 'Gender'>

访问枚举:

>>> for g in Gender:
...     print(g.name,g.value)
...
男 1
女 0
未知 2
>>> print(Gender.男.name)
男
>>> print(Gender.男.value)
1
>>> isinstance(Gender.男,Gender)
True
>>> Gender['男']
<Gender.男: 1>
>>> Gender['男'].value
1
>>> Gender['男'].name
'男'
>>> Gender(2).name
'未知'

接下来,让我们先看看不使用枚举的版本,然后再看看使用枚举的版本,这样就知道枚举的好处了。

以汽车销售为例,我们需要根据不同国家的税率来计算汽车的出售价格。不使用枚举的版本如下:

from dataclasses import dataclass

@dataclass
class Car:
    model: str
    price: float
    reGIStraion_state: str

    def total_cost(self) -> float:
        match self.registraion_state:
            case "OR":
                return  self.price + (self.price * 0.05)
            case "WA":
                return  self.price + (self.price * 0.10)
            case "CA":
                return  self.price + (self.price * 0.08)
            case _:
                raise TypeError("Invalid registraion_state value")


car1 = Car(model="RAV4", price=30000, registraion_state="OR")
car2 = Car(model="RAV4", price=30000, registraion_state="WA")
car3 = Car(model="RAV4", price=30000, registraion_state="CA")
print(car1.total_cost())
print(car2.total_cost())
print(car3.total_cost())

代码共 26 行,用 3.10 版本运行结果如下:

31500.0
33000.0
32400.0

接下来,我们来看一看使用枚举版本的代码:

from dataclasses import dataclass

from enum import Enum

class StateTax(Enum):
    OR = 0.05
    WA = 0.10
    CA = 0.08

@dataclass
class Car:
    model: str
    price: float
    tax: StateTax

    def total_cost(self) -> float:
        return  self.price + (self.price * self.tax.value)       
    
    def get_tax(self):
        return self.tax.value


car1 = Car(model="RAV4", price=30000, tax=StateTax.OR)
car2 = Car(model="RAV4", price=30000, tax=StateTax.WA)
car3 = Car(model="RAV4", price=30000, tax=StateTax.CA)
print(car1.total_cost())
print(car2.total_cost())
print(car3.total_cost())

代码共 28 行,运行结果不变,但是代码更优雅,更容易阅读了。而且后续增加出口的国家地区,也非常简单,只需要增加一个枚举类型,创建一个新的 Car 对象,需求修改 Car 类的任何代码:

class StateTax(Enum):
    OR = 0.05
    WA = 0.10
    CA = 0.08
    CN = 0.03

car4 = Car(model="RAV4", price=30000, tax=StateTax.CN)

从字典创建枚举

from enum import Enum

tax = {
    'OR': 0.05,
    'WA': 0.10,
    'CA': 0.08,
    'CN': 0.03
}

StateTax = Enum('tax', tax)

访问枚举的三种方式:

print(StateTax['CN'])
print(StateTax.CN)
print(StateTax(0.03)) #通过 value 来访问

最后的话

枚举 (Enum) 是绑定到唯一值的符号。我们可以通过定义一个继承自 Enum 的类来创建枚举,使用 enum[member_name] 通过名称访问 Enum 成员,也可以通过并通过 enum(member_value) 访问,还可以通过 enum.member_name 来访问。Enum 可以帮助我们使代码更具可读性,更具可维护性,推荐大家都用一用。

到此这篇关于详解Python中的枚举类型的文章就介绍到这了,更多相关Python枚举类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Python中的枚举类型

本文链接: https://www.lsjlt.com/news/119924.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Python中的枚举类型
    目录什么是枚举类型为什么要使用枚举如何使用枚举从字典创建枚举最后的话你好,我是 征哥,今天分享一下 Python 中的枚举类型,为什么需要枚举类型,及如何使用。 什么是枚举类型 枚举...
    99+
    2022-11-11
  • 详解 TypeScript 枚举类型
    目录1. 数字枚举2. 字符串枚举3. 反向映射4. 异构枚举5. 常量枚举6. 枚举成员类型和联合枚举类型(1)枚举成员类型(2)联合枚举类型7. 枚举合并前言: TypeScri...
    99+
    2022-11-12
  • python枚举类型
    笔记: 一:枚举类型的定义二:枚举类和普通类的区别 1:值不可变 2:具有防止相同标签得功能,不同标签的值可以相同!三:枚举类型、枚举值、枚举名称 1:VIP.YELLOW.Value 获得标签的值 2:VIP....
    99+
    2023-01-30
    类型 python
  • Golang表示枚举类型的详细讲解
    枚举,是一种重要的数据类型,由一组键值对组成,通常用来在编程语言中充当常量的标识符。在主流行编程语言如 c、 java 等,都有原生支持。在 go 中,大家却找不到 enum 或者...
    99+
    2022-11-12
  • python枚举类型定义与使用讲解
    目录1.定义2.使用3.枚举构造器1.定义 在某些情况下,一个类的对象是有限且固定的,比如季节类,它只有 4 个对象;再比如行星类,目前只有 8 个对象。这种实例有限且固定的类,在 ...
    99+
    2022-11-11
  • vue3声明字段名为枚举的类型详解
    目录vue3声明字段名为枚举类型下面是Type的枚举声明,共有6个字段vue使用提升之"枚举"应用方式一(适用于简易过滤器中)方拾二(过滤器,循环列表)vue3声...
    99+
    2022-11-13
  • C#枚举类型的基础讲解
    本篇内容主要讲解“C#枚举类型的基础讲解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#枚举类型的基础讲解”吧!对于C#枚举类型不仅可以提高程序的可读性,而且可以减少因底层值发生改变而导致的程...
    99+
    2023-06-18
  • 如何理解TypeScript枚举类型
    本篇内容主要讲解“如何理解TypeScript枚举类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解TypeScript枚举类型”吧!前言:TypeScript 在 ES 原有类型基础上...
    99+
    2023-06-25
  • SpringBootEntity中枚举类型详细使用介绍
    目录简介方案对比枚举用法示例建表EntityEnumControllerServiceMapper测试1.正常操作2.前端传空字符串3.前端传null简介方案对比 本处列举表示类型或...
    99+
    2022-11-13
    SpringBoot Entity SpringBoot Entity枚举
  • 详解在Go语言中如何实现枚举类型
    目录前言Go 语言中的 “枚举类型”使用 itoa 优雅实现枚举为自定义的枚举添加方法Name()OriginalString()Values()ValueO...
    99+
    2023-05-16
    Go语言实现枚举类型 Go实现枚举类型 Go语言 枚举
  • Python 枚举类源码解析
    元类编程,生成类的类,可以动态生成类。 用法: type(name, bases, dict) name -> 类名: str bases -> 基类: tuple dict -> 属性: dict EnumMeta元...
    99+
    2023-01-30
    源码 Python
  • Python中使用枚举类
    开发中我们经常定义常量, 其实有更好的方法:为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python中提供了Enum类来实现这个功能: from enum import Enum Numbers...
    99+
    2023-01-31
    Python
  • C#枚举类型的语法
    本篇内容主要讲解“C#枚举类型的语法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#枚举类型的语法”吧!C#枚举类型语法是什么呢?让我看看下面的讲解: usingSystem;&nb...
    99+
    2023-06-17
  • C#枚举类型的应用
    这篇文章主要讲解了“C#枚举类型的应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#枚举类型的应用”吧!C#枚举类型应用是怎么样的呢?首先我们来看看几个问题:◆C#枚举类型与基础类型的转...
    99+
    2023-06-17
  • Java中枚举类的用法示例详解
    目录1.引入枚举类2.实现枚举类3.枚举类的使用注意事项4.枚举的常用方法5.enum细节1.引入枚举类 Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个...
    99+
    2022-11-13
  • C#中的枚举类型(Enum)介绍
    枚举(Enum)定义 enum关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方...
    99+
    2022-11-13
  • java中有哪些枚举类型
    这篇文章给大家介绍java中有哪些枚举类型,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、Color枚举类就是class,而且是一个不可以被继承的final类。其枚举值(RED,BLUE.。.)都是Color类型的类...
    99+
    2023-06-17
  • Java枚举类型与泛型使用解读
    目录一、枚举类型1、使用枚举类型设置常量2、枚举类型常用方法3、枚举类型中的构造方法二、泛型1、泛型的常规用法2、泛型的高级用法总结一、枚举类型 1、使用枚举类型设置常量 以往设置常...
    99+
    2022-12-28
    Java枚举类型 Java泛型 Java枚举类型与泛型
  • java中枚举类型定义和重写枚举的示例分析
    这篇文章将为大家详细讲解有关java中枚举类型定义和重写枚举的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是枚举类型枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用...
    99+
    2023-05-30
    java
  • Java中枚举类enum的values()方法的详解
    Java中枚举类enum的values()方法的详解 简介: 枚举中的一个特殊方法,values(), 在Enum 的 API 文档中也找不到这个方法,当点击values()时,也会跳到本类上。 此方法可以理解为:将枚举类转变为一个枚举类型...
    99+
    2023-08-18
    java 开发语言 jvm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作