Python - 枚举



Python 中的枚举

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

在下面的代码中,“subjects” 是枚举。它具有不同的枚举成员,每个成员都是枚举类 subject 的对象。这些成员具有 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

在 Enum 中访问 Modes

枚举类的成员可以通过两种模式进行访问 -

  • value − 在此模式下,使用 “value” 关键字后跟 enum 类的 object 来访问枚举成员的值。
  • name − 同样,我们使用 “name” 关键字来访问枚举成员的 name。

以下示例说明了如何访问枚举成员的 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

我们知道 enum member 可以使用分配给它的唯一值或它的 name 属性来访问。因此,subjects(“E”)subjects[“ENGLISH”] 返回 subjects。ENGLISH 成员。