Python - 枚举



Python 中的枚举

在 Python 中,术语枚举指的是为一组字符串分配固定常量值的过程,以便每个字符串都可以通过与其绑定的值来识别。包含在enum模块(它是 Python 标准库的一部分)中的 Enum 类用作父类来定义一组标识符的枚举 - 通常以大写形式编写。

示例

在下面的代码中,“subjects”是枚举。它具有不同的枚举成员,每个成员都是枚举类 subjects 的对象。这些成员具有 name 和 value 属性。

# importing enum 
from enum import Enum

class subjects(Enum):
   ENGLISH = 1
   MATHS = 2
   SCIENCE = 3
   SANSKRIT = 4

obj = subjects.MATHS
print (type(obj))

它产生以下输出 -

<enum 'subjects'> 

枚举类不能具有相同的成员出现两次,但是,多个成员可以分配相同的值。要确保每个成员都绑定了唯一的值,请使用@unique装饰器。

示例

在此示例中,我们使用 @unique 装饰器来限制重复。

from enum import Enum, unique

@unique
class subjects(Enum):
   ENGLISH = 1
   MATHS = 2
   GEOGRAPHY = 3
   SANSKRIT = 2

这将引发如下所示的异常 -

   @unique
    ^^^^^^
   raise ValueError('duplicate values found in %r: %s' %
ValueError: duplicate values found in <enum 'subjects'>: SANSKRIT -> MATHS

Enum 类是一个可调用类,因此您可以使用其构造函数来创建枚举。此构造函数接受两个参数,它们是枚举的名称和一个由空格分隔的枚举成员符号名称组成的字符串。

示例

以下是定义枚举的另一种方法 -

from enum import Enum
subjects = Enum("subjects", "ENGLISH MATHS SCIENCE SANSKRIT")
print(subjects.ENGLISH)
print(subjects.MATHS)
print(subjects.SCIENCE)
print(subjects.SANSKRIT)

此代码将给出以下输出 -

subjects.ENGLISH
subjects.MATHS
subjects.SCIENCE
subjects.SANSKRIT

访问枚举中的模式

可以以两种模式访问枚举类的成员 -

  • - 在此模式下,使用“value”关键字后跟枚举类的对象来访问枚举成员的值。

  • 名称 - 同样,我们使用“name”关键字来访问枚举成员的名称。

示例

以下示例说明了如何访问枚举成员的值和名称。

from enum import Enum

class subjects(Enum):
   ENGLISH = "E"
   MATHS = "M"
   GEOGRAPHY = "G"
   SANSKRIT = "S"
   
obj = subjects.SANSKRIT
print(type(obj))
print(obj.name)
print(obj.value)

它将产生以下输出 -

<enum 'subjects'> 
SANSKRIT
S

遍历枚举

您可以使用for循环按其在定义中出现的顺序遍历枚举成员。

示例

以下示例显示了如何使用 for 循环遍历枚举 -

from enum import Enum

class subjects(Enum):
   ENGLISH = "E"
   MATHS = "M"
   GEOGRAPHY = "G"
   SANSKRIT = "S"

for sub in subjects:
   print (sub.name, sub.value)

它将产生以下输出 -

ENGLISH E
MATHS M
GEOGRAPHY G
SANSKRIT S

我们知道枚举成员可以使用分配给它的唯一值或其 name 属性来访问。因此,subjects("E") 以及 subjects["ENGLISH"] 都返回 subjects.ENGLISH 成员。

广告