枚举类

枚举类

在一些情况下,当我们想要表示那些有规律的、有限且固定的对象时,可以使用枚举类;比如月份、星期、四季等;
枚举类一旦被定义,那么枚举类中的对象不允许被外界更改

在Python中有两种方式定义枚举类:

  • 利用enum模块下的Enum函数;
  • 通过继承Enum基类来派生出枚举类;

Enum()函数:

from enum import Enum
Season = Enum('Season',('Spring','Summer','Fall','Winter'))

如上,Enum有两个参数,第一个参数指定枚举类的类名,第二个参数为一个元组,用于定义枚举类中的所有成员;

枚举类中的每个成员的都有两个属性:name、value。name是成员名,value是该成员在元组列表中的序号值,序号值默认从1开始;

访问枚举类:

from enum import Enum
Season = Enum('Season',('Spring','Summer','Fall','Winter'))
print(Season.Spring)
print(Season.Spring.name)
print(Season.Spring.value)

print(Season['Fall'])
print(Season(3))
print(Season(3).value)

##
Season.Spring
Spring
1
Season.Fall
Season.Fall
3

注意访问时的前缀是等号左边的Season,不是括号内的;

遍历枚举类:
通过__members__属性可以遍历枚举类。
__members__返回一个dict字典,利用items()方法可以遍历所有键值对;

from enum import Enum
Season = Enum('Season',('Spring','Summer','Fall','Winter'))
for n,v in Season.__members__.items():
    print(n,v,sep=":")
##
Spring:1
Summer:2
Fall:3
Winter:4

for n in Season.__members__:
    print(n)
##
Spring
Summer
Fall
Winter

for v in Season:
    print(v)
##
Season.Spring
Season.Summer
Season.Fall
Season.Winter

派生枚举类:
如果需要定义更复杂的枚举类,可以通过继承Enum来派生枚举类,例如:

from enum import Enum
class Weekday(Enum):
    Sun = "星期日"
    Mon = "星期一"
    Tue = "星期二"
    Wed = "星期三"
    Thu = "星期四"
    Fri = "星期五"
    Sat = "星期六"
    def info(self):
        print("今天是%s!" % self.value)

在这个例子中,我们不仅给枚举类赋予了value,即星期一至星期日,还额外定义了枚举类的方法info();

注意一点,枚举类不允许枚举成员的键相同,即成员标签,但是运行value相同,这和字典很像;当value相同时,后者相当于前者的别名;当存在别名情况时,遍历输出会忽略掉重复项;

print(Weekday.Sun)
print(Weekday.Mon.name)
print(Weekday.Mon.value)
print()
print(Weekday['Wed'].value)
print(Weekday('星期五'))
Weekday.Mon.info()
##
Weekday.Sun
Mon
星期一

星期三
Weekday.Fri
今天是星期一!

当然派生出的类依然可以通过__members__遍历,不再赘述;

装饰器:
枚举类也是类,因此也可以使用装饰器,例如@property,@unique等,不再举例;

部分内容(不限于本文)参考自:

菜鸟编程
廖雪峰的官方网站
c语言中文网
以及《Python编程-从入门到实践》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值