在 Python 中,“枚举”是指给一组字符串分配固定常量值的过程,这样每个字符串都可以通过绑定到它的值来识别。枚举模块中的 Enum
类(该模块是 Python 标准库的一部分)被用作定义一组标识符的父类——通常以大写字母书写。
示例
在下面的代码中,“subjects” 是枚举。它有不同的枚举成员,每个成员都是枚举类 “subjects” 的对象。这些成员具有名称和值属性。
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
我们知道可以通过分配给枚举成员的独特值或通过其名称属性来访问枚举成员。因此,subjects("E")
以及 subjects["ENGLISH"]
都将返回 subjects.ENGLISH
成员。