【Python】枚举的定义和使用(enum)

您所在的位置:网站首页 Python怎么定义变量默认值 【Python】枚举的定义和使用(enum)

【Python】枚举的定义和使用(enum)

2024-07-11 14:20| 来源: 网络整理| 查看: 265

文章目录 枚举简介模块内容新建枚举属性访问重复问题确保唯一自动赋值成员迭代比较大小温馨提示引用参考

枚举简介

为什么需要枚举?枚举是用来定义常量的。枚举元素具有不可变的特性,可以用来充当常量。

枚举是与唯一常量值绑定的一系列符号名称(成员)的集合。枚举中的元素可以进行恒等比较,并且枚举本身可迭代。

例如,对于圆周率,我们在 Python 中简单定义 PI = 3.14,但 PI 是变量,是可以被修改的,故更严格地定义常量需要用到枚举。本文是对 Python 内置枚举模块 enum 的讲解。

注解:枚举成员名称的大小写 因为枚举是用来表示常量的,因此,枚举成员名称建议使用大写字母,本文的示例将采用此种风格。

模块内容

enum 模块定义了四个枚举类,用来定义名称与值的唯一组合:Enum、IntEnum、Flag和IntFlag。此外,还定义了一个装饰器 unique() 和一个辅助类 auto。

class enum.Enum:创建枚举常量的基类。class enum.IntEnum:创建 int 子类枚举常量的基类。class enum.Flag:创建可与位运算符搭配使用,而又不失去 Flag 成员资格的枚举常量的基类。class enum.IntFlag:创建可与位运算符搭配使用,而又不失去 IntFlag 成员资格的枚举常量的基类。enum.unique():Enum 类的装饰器,确保一个名称只绑定一个值。class enum.auto:用合适的值代替 Enum 成员的实例。初始默认值从 1 开始。 新建枚举

枚举是用 class 语法创建的,这种方式易读、易写。利用子类 Enum 定义枚举方法如下:

from enum import Enum class Color(Enum): RED = 1 GREEN = 2 BLUE = 3

注解:Enum 成员值 成员值可以是 int、str 等。若无需设定确切值,auto 实例可以自动为成员分配合适的值。将 auto 和其它值混用需慎重。

注解:命名法

类 Color 是枚举(Enum)。Color.RED、Color.GREEN 等属性是枚举成员(Enum 成员),也是常量。枚举成员具有名称和值(例如 Color.RED 的名称为 RED,Color.BLUE 的值为3等等)。

注解:虽然 Enum 由 class 语法创建,但 Enum 并不是常规的 Python 类。

属性访问

可通过名索引访问:

>>> from enum import Enum >>> class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 ... >>> Color['RED'] >>> Color['GREEN'] >>> Color['BLUE']

可通过值索引访问:

>>> from enum import Enum >>> class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 ... >>> Color(1) >>> Color(2) >>> Color(3)

如果你有一个枚举成员,可得到它的 name 和 value:

>>> from enum import Enum >>> class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 ... >>> member = Color.RED >>> member.name 'RED' >>> member.value 1 重复问题

两个枚举成员的名称不能相同:(弹出异常)

>>> from enum import Enum >>> class Color(Enum): ... RED = 1 ... RED = 2 ... Traceback (most recent call last): ... TypeError: Attempted to reuse key: 'RED

但两个枚举成员的值可以相同:(不会报错)

>>> from enum import Enum >>> class Color(Enum): ... RED = 1 ... GREEN = 1 ... 确保唯一

默认情况下,枚举允许多个枚举成员具有相同的值。如需禁用此行为,可以使用装饰器 @enum.unique

>>> from enum import Enum, unique >>> @unique ... class Color(Enum): ... RED = 1 ... GREEN = 1 ... Traceback (most recent call last): ... ValueError: duplicate values found in : GREEN -> RED 自动赋值

enum.auto() 函数可自动为枚举成员分配值:

>>> from enum import Enum, auto >>> class Color(Enum): ... RED = auto() ... GREEN = auto() ... BLUE = auto() ... >>> list(Color) [, , ] 成员迭代 >>> from enum import Enum >>> class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 ... >>> for item in Color: ... print(item.name, item.value) ... RED 1 GREEN 2 BLUE 3 比较大小

枚举成员间不允许比较大小:

>>> from enum import Enum >>> class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 ... >>> Color.RED >> from enum import Enum >>> class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3 ... >>> Color.RED == 1 False 温馨提示

枚举模块 enum 在 Python3.4 版本中首次添加,3.4之前的版本使用需安装:

pip install enum 引用参考

https://docs.python.org/3/library/enum.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3