广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python枚举类定义和使用方法
  • 662
分享到

Python枚举类定义和使用方法

2024-04-02 19:04:59 662人浏览 八月长安

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

摘要

前言: 一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用一个类表示月份,则该类的实例对象最多有 12 个;再比如用一个类表示季节,则该类的实例化对象最多有 4 个。 针对

前言:

一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用一个类表示月份,则该类的实例对象最多有 12 个;再比如用一个类表示季节,则该类的实例化对象最多有 4 个。

针对这种特殊的类,python 3.4 中新增加了 Enum 枚举类。也就是说,对于这些实例化对象个数固定的类,可以用枚举类来定义。

例如,下面程序演示了如何定义一个枚举类:

from enum import Enum
class Color(Enum):
# 为序列值指定value值
red = 1
green = 2
blue = 3

如果想将一个类定义为枚举类,只需要令其继承自 enum 模块中的 Enum 类即可。例如在上面程序中,Color 类继承自 Enum 类,则证明这是一个枚举类。

在 Color 枚举类中,red、green、blue 都是该类的成员(可以理解为是类变量)。注意,枚举类的每个成员都由 2 部分组成,分别为 name 和 value,其中 name 属性值为该枚举值的变量名(如 red),value 代表该枚举值的序号(序号通常从 1 开始)。

和普通类的用法不同,枚举类不能用来实例化对象,但这并不妨碍我们访问枚举类中的成员。访问枚举类成员的方式有多种,例如以 Color 枚举类为例,

在其基础上添加如下代码:

#调用枚举成员的 3 种方式
print(Color.red)
print(Color['red'])
print(Color(1))
#调取枚举成员中的 value 和 name
print(Color.red.value)
print(Color.red.name)
#遍历枚举类中所有成员的 2 种方式
for color in Color:
print(color)

程序输出结果为:

Color.red
Color.red
Color.red
1
red
Color.red
Color.green
Color.blue

枚举类成员之间不能比较打下,但可以用 == 或者 is 进行比较是否相等,例如

print(Color.red == Color.green)
print(Color.red.name is Color.green.name)

输出结果为:

Flase
Flase

需要注意的是,枚举类中各个成员的值,不能在类的外部做任何修改,也就是说,下面语法的做法是错误的:

Color.red = 4

除此之外,该枚举类还提供了一个​​__members__​​属性,该属性是一个包含枚举类中所有成员的字典,通过遍历该属性,也可以访问枚举类中的各个成员。

例如:

for name,member in Color.__members__.items():
print(name,"->",member)

输出结果为:

red -> Color.red
green -> Color.green
blue -> Color.blue

值得一提的是,Python 枚举类中各个成员必须保证 name 互不相同,但 value 可以相同

举个例子:

from enum import Enum
class Color(Enum):
# 为序列值指定value值
red = 1
green = 1
blue = 3
print(Color['green'])

输出结果为:

Color.red

可以看到,Color 枚举类中 red 和 green 具有相同的值(都是 1),Python 允许这种情况的发生,它会将 green 当做是 red 的别名,因此当访问 green 成员时,最终输出的是 red。

在实际编程过程中,如果想避免发生这种情况,可以借助 @unique 装饰器,这样当枚举类中出现相同值的成员时,程序会报 ValueError 错误。

例如:

#引入 unique
from enum import Enum,unique
#添加 unique 装饰器
@unique
class Color(Enum):
# 为序列值指定value值
red = 1
green = 1
blue = 3
print(Color['green'])

运行程序会报错:

Traceback (most recent call last):
File "D:\python3.6\demo.py", line 3, in <module>
class Color(Enum):
File "D:\python3.6\lib\enum.py", line 834, in unique
(enumeration, alias_details))
ValueError: duplicate values found in <enum 'Color'>: green -> red

除了通过继承 Enum 类的方法创建枚举类,还可以使用 Enum() 函数创建枚举类。

例如:

from enum import Enum
#创建一个枚举类
Color = Enum("Color",('red','green','blue'))
#调用枚举成员的 3 种方式
print(Color.red)
print(Color['red'])
print(Color(1))
#调取枚举成员中的 value 和 name
print(Color.red.value)
print(Color.red.name)
#遍历枚举类中所有成员的 2 种方式
for color in Color:
print(color)

Enum() 函数可接受 2 个参数,第一个用于指定枚举类的类名,第二个参数用于指定枚举类中的多个成员。

如上所示,仅通过一行代码,即创建了一个和前面的 Color 类相同的枚举类。

运行程序,其输出结果为:

Color.red
Color.red
Color.red
1
red
Color.red
Color.green
Color.blue

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

--结束END--

本文标题: Python枚举类定义和使用方法

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

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

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

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

下载Word文档
猜你喜欢
  • Python枚举类定义和使用方法
    前言: 一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用一个类表示月份,则该类的实例对象最多有 12 个;再比如用一个类表示季节,则该类的实例化对象最多有 4 个。 针对...
    99+
    2022-11-11
  • Python枚举类怎么定义和使用
    本篇内容主要讲解“Python枚举类怎么定义和使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python枚举类怎么定义和使用”吧!一些具有特殊含义的类,其实例化对象的个数往往是固定的,比如用...
    99+
    2023-06-30
  • python枚举类型定义与使用讲解
    目录1.定义2.使用3.枚举构造器1.定义 在某些情况下,一个类的对象是有限且固定的,比如季节类,它只有 4 个对象;再比如行星类,目前只有 8 个对象。这种实例有限且固定的类,在 ...
    99+
    2022-11-11
  • Python枚举怎么定义与使用
    这篇文章主要介绍了Python枚举怎么定义与使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python枚举怎么定义与使用文章都会有所收获,下面我们一起来看看吧。1. 枚举的定义首先,定义枚举要导入enum模...
    99+
    2023-07-06
  • 详解Python枚举的定义与用法
    目录1. 枚举的定义2. 枚举取值 3. 迭代器 4. 枚举比较1. 枚举的定义 首先,定义枚举要导入enum模块。枚举定义用class关键字,继承Enum类。用于定义枚举...
    99+
    2023-05-15
    Python枚举 Python枚举定义 Python枚举用法
  • 枚举类型的定义和应用总结
    定义:如果一种变量只有几种可能的值,可以定义为枚举类型。所谓“枚举类型”是将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。 声明:声明枚举类型用enum开头,例如:复制代...
    99+
    2022-11-15
    枚举类型
  • java中枚举类型定义和重写枚举的示例分析
    这篇文章将为大家详细讲解有关java中枚举类型定义和重写枚举的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是枚举类型枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用...
    99+
    2023-05-30
    java
  • Python中使用枚举类
    开发中我们经常定义常量, 其实有更好的方法:为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python中提供了Enum类来实现这个功能: from enum import Enum Numbers...
    99+
    2023-01-31
    Python
  • C#中的枚举类型怎么定义使用
    这篇文章主要介绍“C#中的枚举类型怎么定义使用”,在日常操作中,相信很多人在C#中的枚举类型怎么定义使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#中的枚举类型怎么定义使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
  • C# 枚举类型的声明和使用方法
    本篇内容主要讲解“C# 枚举类型的声明和使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C# 枚举类型的声明和使用方法”吧!目录前言相关介绍一、枚举声明二、声明位置三、枚举使用前言学习记录...
    99+
    2023-06-20
  • java枚举如何定义与使用
    在Java中,枚举是一种特殊的数据类型,用于定义一组常量。枚举常量在声明时就被确定,并且不能被修改。下面是定义和使用Java枚举的步...
    99+
    2023-08-21
    java
  • Python枚举方法怎么用
    这篇文章主要介绍“Python枚举方法怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python枚举方法怎么用”文章能帮助大家解决问题。在Python中,枚举和我们在对象中定义的类变量时一样的...
    99+
    2023-06-27
  • java 枚举使用方法
    前言在项目中有很多常量,我们都是使用枚举(enum)来处理,下面我就和大家分享一个比较通用的代码枚举 public static String getTextByValue(Integer value) { retu...
    99+
    2019-10-31
    java教程 java
  • java 枚举类定义静态valueOf(java.lang.String)方法的问题及解决
    目录问题的起因猜测、分析最终解决方案枚举类Enum方法简介(valueof,value,ordinal)我们应该注意到enum类型有如下的一些特征了解了这些基本特性,我们来看看如何使...
    99+
    2022-11-12
  • Java枚举类的使用方法是什么
    本篇内容介绍了“Java枚举类的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 枚举类有哪些特点创建一个ColorEnum的...
    99+
    2023-06-16
  • Java枚举类使用Lombok方式
    目录Java枚举类使用Lombok普通写法Lombok写法更精简的写法Java自定义枚举类枚举类的创建枚举类的使用Java枚举类使用Lombok 枚举类是一个特殊的常量类,由于其特殊...
    99+
    2022-11-13
  • C语言枚举型变量怎么定义和使用
    在C语言中,枚举类型(enum type)是一种自定义的数据类型,用于定义一组有限的取值,这些取值称为枚举常量(enum const...
    99+
    2023-10-10
    C语言
  • java枚举enum和Enum类的使用
    目录一、为什么需要枚举二、枚举介绍三、枚举的实现方式1.自定义枚举 :2.enum关键字 :四、枚举类补充五、关于枚举类的父类——Enum类1.基本介绍 :2...
    99+
    2023-03-02
    java枚举enum java Enum类
  • C# 枚举类型的声明和使用
    目录前言相关介绍一、枚举声明二、声明位置三、枚举使用总结前言 学习记录下枚举的声明和使用,枚举可用来规范开发 文章中代码的项目名为Project1,C#类名为Class1 相关介...
    99+
    2022-11-12
  • java枚举enum和Enum类如何使用
    这篇文章主要介绍“java枚举enum和Enum类如何使用”,在日常操作中,相信很多人在java枚举enum和Enum类如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java枚举enum和Enum类如...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作