python3 枚举_Python3(八) 枚举详解

一.枚举其实是一个类

建议标识名字用大写

1.枚举类:

from enum importEnumclassVIP(Enum):

YELLOW= 1GREEN= 2BLACK= 3RED= 4

print(VIP.YELLOW)#VIP.YELLOW    #关注的是它的标签不是数字

2 枚举和普通类相比的优势

三种其他的普通方法表示枚举:

(1)

yellow= 1green= 2(2)字典的表示方式

{'yellow':1,'green':2}

(3)类的表示方式classTypeDiamond():

yellow= 1green= 2

这些方式,它们都是可变的,可以在代码中轻易的更改值,且没有防止相同标签的功能。

3.枚举的特点:

from enum importEnumclassVIP(Enum):

YELLOW= 1#YELLOW= 2   #不可重复,报错

BLACK= 3RED= 4

print(VIP.YELLOW)#VIP.YELLOW = 6    #不可更改,报错

二.枚举类型、枚举名称与枚举值

1.获取枚举类型下某一数值:

from enum importEnumclassVIP(Enum):

YELLOW= 1GREEN= 2BLACK= 3RED= 4print(VIP.YELLOW.value)print(VIP.YELLOW.name)print(VIP.YELLOW)print(VIP['YELLOW'])#1 #枚举值

#YELLOW    # 获取标签名

#VIP.YELLOW    #    枚举类型

#VIP.YELLOW

2.枚举是可以遍历的:

from enum importEnumclassVIP(Enum):

YELLOW= 1GREEN= 2BLACK= 3RED= 4

for v inVIP :print(v)#VIP.YELLOW

VIP.GREEN

VIP.BLACK

VIP.RED

三. 枚举的比较运算

1.两个枚举之间可以使用等值比较(==),枚举与数值比较的判断结果不对。两个枚举之间不能进行大小比较。

2.支持is操作:

result = VIP.GREEN isVIP.GREEN#True

3.两个大类之间也可以进行等值比较,不过结果是False:

from enum importEnumclassVIP(Enum):

YELLOW= 1GREEN= 2BLACK= 3RED= 4

classVIP1(Enum):

YELLOW= 1GREEN= 2BLACK= 3RED= 4

print(VIP.GREEN ==VIP1.GREEN)#False

四.枚举注意事项

1.枚举的数值可以相同,在这种情况下,将第二种枚举类型看成别名。遍历时不会打印别名:

classVIP(Enum):

YELLOW= 1GREEN= 1 #别名,不会报错

BLACK= 3RED= 4

print(VIP.GREEN)#VIP.YELLOW

2.把别名加入遍历循环:

(1)for v in VIP.__members__.items() :print(v)#('YELLOW', )

#('GREEN', )

#('BLACK', )

#('RED', )

(2)

或者遍历__members__:for v in VIP.__members__:print(v)#YELLOW

#GREEN

#BLACK

#RED

五.枚举转换

1.在数据库里一般存储数值或者标签名字来代表枚举类型,推荐存储数值,数字占用的空间更小。但是不建议在代码种用数值代表枚举,可读性不强。

2.如何将数字转换成枚举类型:

from enum importEnum

a= 1

classVIP(Enum):

YELLOW= 1GREEN= 2BLACK= 3RED= 4

print(VIP(a)) #转换枚举类型

#VIP.YELLOW

六.枚举小结

1.要求每个枚举类型都是数字的时候继承IntEnum:

from enum importIntEnumclassVIP(IntEnum):

YELLOW= 1GREEN= 2BLACK= 3RED= 4

2.限制不同的枚举类型不能取相同的值:

from enum importEnumfrom enum importIntEnum,unique

@unique#装饰器

classVIP(IntEnum):

YELLOW= 1GREEN= 2BLACK= 3RED= 4

枚举类型不能实例化,属于单例模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值