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
^^^^^^
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
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
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
MATHS M
GEOGRAPHY G
SANSKRIT S
我们知道 enum member 可以使用分配给它的唯一值或它的 name 属性来访问。因此,subjects(“E”) 和 subjects[“ENGLISH”] 返回 subjects。ENGLISH 成员。