详解Python中的枚举类型

08-10 72阅读 0评论

你好,我是 征哥,今天分享一下 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.033000.032400.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枚举类型内容请搜索云初冀北以前的文章或继续浏览下面的相关文章希望大家以后多多支持云初冀北!

免责声明
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:Goliszhou@gmail.com
$

发表评论

表情:
评论列表 (暂无评论,72人围观)

还没有评论,来说两句吧...