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 都是该类的成员(可以理解为是类变量)。注意,枚举类的每个成员都由 2 部分组成,分别为name 和 value,其中 name 属性值为该枚举值的变量名(如 red),value 代表该枚举值的序号(序号通常从 1 开始)。
和普通类的⽤法不同,枚举类不能⽤来实例化对象,但这并不妨碍我们访问枚举类中的成员。访问枚举类成员的⽅式有多种,例如以 Color 枚举类为例,在其基础上添加如下代码:
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:778463939
寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
#调⽤枚举成员的 3 种⽅式
d)
php sessionprint(Color['red'])
print(Color(1))
#调取枚举成员中的 value 和 name
d.value)
d.name)
#遍历枚举类中所有成员的 2 种⽅式
for color in Color:
print(color)
程序输出结果为:
vmware虚拟机下载1
red
<
Color.blue
枚举类成员之间不能⽐较打下,但可以⽤ == 或者 is 进⾏⽐较是否相等,例如:
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:778463939
寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
d == )
d.name name)
输出结果为:
python入门教程非常详细电子书Flase
Flase
需要注意的是,枚举类中各个成员的值,不能在类的外部做任何修改,也就是说,下⾯语法的做法是错误的:
除此之外,该枚举类还提供了⼀个 __ members __ 属性,该属性是⼀个包含枚举类中所有成员的字典,通过遍历该属性,也可以访问枚举类中的各个成员。例如:
for name,member in Color.__members__.items():
print(name,"->",member)
输出结果为:
red -> d
green ->
blue -> Color.blue
值得⼀提的是,Python 枚举类中各个成员必须保证 name 互不相同,但 value 可以相同,举个例⼦:
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:778463939
寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
from enum import Enum
class Color(Enum):
# 为序列值指定value值
red =1
green =1
blue =3
print(Color['green'])
输出结果为:
可以看到,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>
go语言开发环境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() 函数创建枚举类。例如:
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:778463939
寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
from enum import Enum
#创建⼀个枚举类
Color = Enum("Color",('red','green','blue'))
#调⽤枚举成员的 3 种⽅式
d)
print(Color['red'])
print(Color(1))
#调取枚举成员中的 value 和 name
d.value)
d.name)
#遍历枚举类中所有成员的 2 种⽅式
for color in Color:
汇编指令用法大全补码怎么算出来的
print(color)
Enum() 函数可接受 2 个参数,第⼀个⽤于指定枚举类的类名,第⼆个参数⽤于指定枚举类中的多个成员。如上所⽰,仅通过⼀⾏代码,即创建了⼀个和前⾯的 Color 类相同的枚举类。运⾏程序,其输出结果为:
1
red
<
Color.blue
结尾给⼤家推荐⼀个⾮常好的学习教程,希望对你学习Python有帮助!
Python基础⼊门教程推荐:更多Python视频教程-关注B站:Python学习者
【Python教程】全⽹最容易听懂的1000集python系统学习教程(答疑在最后四期,满满⼲货)
Python爬⾍案例教程推荐:更多Python视频教程-关注B站:Python学习者
2021年Python最新最全100个爬⾍完整案例教程,数据分析,数据可视化,记得收藏哦
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论