Python-枚举


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

实施例1

from enum import Enum

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

在上面的代码中,“subjects”是枚举。它有不同的枚举成员,例如,subject.MATHS。每个成员都被分配一个值。

每个成员都是枚举类subject的ab对象,并具有name和value属性。

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

它会产生以下输出-

<enum 'subjects'> 2

实施例2

绑定到枚举成员的值不必总是整数,它也可以是字符串。请参阅以下示例 -

from enum import Enum

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

它将产生以下输出-

<enum 'subjects'> SANSKRIT S

实施例3

您可以借助for循环按照枚举成员在定义中出现的顺序迭代它们 -

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

它将产生以下输出-

ENGLISH E
MATHS M
GEOGRAPHY G
SANSKRIT S

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

实施例4

枚举类不能有相同的成员出现两次,但是,可以为多个成员分配相同的值。为了确保每个成员都有唯一的值绑定,请使用 @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")

Enum构造函数在这里使用两个参数。第一个是枚举的名称。第二个参数是一个由枚举成员符号名称组成的字符串,以空格分隔。