Python枚举类定义和使用方法
本文详细介绍Python 3.4引入的Enum枚举类。涵盖通过继承Enum定义枚举、访问成员(name/value)、使用__members__遍历,以及利用@unique装饰器防止值重复的方法。同时演示了使用Enum()函数快速创建枚举类的技巧,帮助开发者规范固定数量实例的类定义。
Python枚举类概述
前言:
某些具有特定业务含义的类,其实例化对象的数量通常是固定的。例如,若用一个类来表示月份,则该类的实例对象最多包含12个;若用类表示季节,则实例对象最多为4个。
针对此类实例数量固定的特殊类,Python 3.4版本引入了Enum枚举类。这意味着,对于实例化对象个数受限的类,推荐使用枚举类进行定义。
定义枚举类
例如,以下程序演示了如何定义一个枚举类:
from enum import Enum
class Color(Enum):
# 为序列值指定value值
red = 1
green = 2
blue = 3若要将一个类定义为枚举类,只需让其继承自enum模块中的Enum类即可。如前文程序所示,Color类继承自Enum类,即表明它是一个枚举类。
在Color枚举类中,red、green和blue均为该类的成员(可视为类变量)。需注意,枚举类的每个成员由两部分组成:name和value。其中,name属性值为该枚举值的变量名(如red),而value代表该枚举值的序号(通常从1开始)。
访问枚举类成员
与普通类不同,枚举类不能直接用于实例化对象,但这并不影响我们访问枚举类中的成员。访问枚举类成员的方式有多种,以Color枚举类为例:
在此基础上添加如下代码:
#调用枚举成员的 3 种方式
print(Color.red)
print(Color['red'])
print(Color(1))
#调取枚举成员中的 value 和 name
print(Color.red.value)
print(Color.red.name)
#遍历枚举类中所有成员的 2 种方式
for color in Color:
print(color)程序输出结果为:
Color.red Color.red Color.red 1 red Color.red Color.green Color.blue
枚举成员比较与限制
枚举类成员之间不能进行大小比较,但可以使用==或is运算符来比较是否相等,例如:
print(Color.red == Color.green)
print(Color.red.name is Color.green.name)输出结果为:
Flase Flase
需要注意的是,枚举类中各个成员的值不能在类的外部被修改,也就是说,执行如下语法是错误的:
Color.red = 4
遍历枚举成员
此外,该枚举类还提供了一个__members__属性,该属性是一个包含枚举类中所有成员的字典。通过遍历该属性,也可以访问枚举类中的各个成员。
例如:
for name,member in Color.__members__.items():
print(name,"->",member)输出结果为:
red -> Color.red green -> Color.green blue -> Color.blue
处理重复值与@unique装饰器
值得一提的是,Python枚举类中各个成员必须保证name互不相同,但value可以相同。
举个例子:
from enum import Enum
class Color(Enum):
# 为序列值指定value值
red = 1
green = 1
blue = 3
print(Color['green'])输出结果为:
Color.red
可以看到,Color枚举类中red和green具有相同的值(均为1)。Python允许这种情况发生,它会将green视为red的别名,因此当访问green成员时,最终输出的是red。
在实际编程过程中,若想避免这种情况,可以借助@unique装饰器。这样,当枚举类中出现相同值的成员时,程序会报ValueError错误。
例如:
#引入 unique
from enum import Enum,unique
#添加 unique 装饰器
@unique
class Color(Enum):
# 为序列值指定value值
red = 1
green = 1
blue = 3
print(Color['green'])运行程序会报错:
Traceback (most recent call last): File "D:\python3.6\demo.py", line 3, in <module> class Color(Enum): File "D:\python3.6\lib\enum.py", line 834, in unique (enumeration, alias_details)) ValueError: duplicate values found in <enum 'Color'>: green -> red
使用Enum函数创建枚举类
除了通过继承Enum类的方法创建枚举类,还可以使用Enum()函数来创建枚举类。
例如:
from enum import Enum
#创建一个枚举类
Color = Enum("Color",('red','green','blue'))
#调用枚举成员的 3 种方式
print(Color.red)
print(Color['red'])
print(Color(1))
#调取枚举成员中的 value 和 name
print(Color.red.value)
print(Color.red.name)
#遍历枚举类中所有成员的 2 种方式
for color in Color:
print(color)Enum()函数可接受2个参数,第一个用于指定枚举类的类名,第二个参数用于指定枚举类中的多个成员。
如上所示,仅通过一行代码,即创建了一个和前面的Color类相同的枚举类。
运行程序,其输出结果为:
Color.red Color.red Color.red 1 red Color.red Color.green Color.blue
到此这篇关于Python枚举类定义和使用方法的文章就介绍到这了,更多相关Python 枚举 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













