枚举类型enum是比较重要的一个数据类型,它是一种数据类型而不是数据结构,我们通常将一组常用的常数声明成枚举类型方便后续的使用。当一个变量有几种可能的取值的时候,我们将它定义为枚举类型。在Python中是如何实现的呢?
补充:很多初学者一下子不明白枚举是什么意思,比如我们有段程序很多地方需要用到12个月月份,可以将每个月份都定义出来使用: String Jan = "1月份",但是这样用起来很不好用,需要写12个,然后后续用的时候也不清晰明白,那么枚举类型就可以解决问题,它将这12个月份罗列出来,然后每个月份对应一个值(从0到...),我们用的时候可以直接用声明的枚举类型带出来我们想要的值。
我们声明一个月份的枚举类型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
>>> from enum import Enum
>>> Month = Enum( 'Month' ,( 'Jan' , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' , 'Jul' , 'Aug' , 'Sep' , 'Oct' , 'Nov' , 'Dec' ))
>>> for name,member in Month.__members__.items():
print (name, '=>' ,member, ',' ,member.value)
( 'Jan' , '=>' , <Month.Jan: 1 >, ',' , 1 )
( 'Feb' , '=>' , <Month.Feb: 2 >, ',' , 2 )
( 'Mar' , '=>' , <Month.Mar: 3 >, ',' , 3 )
( 'Apr' , '=>' , <Month.Apr: 4 >, ',' , 4 )
( 'May' , '=>' , <Month.May: 5 >, ',' , 5 )
( 'Jun' , '=>' , <Month.Jun: 6 >, ',' , 6 )
( 'Jul' , '=>' , <Month.Jul: 7 >, ',' , 7 )
( 'Aug' , '=>' , <Month.Aug: 8 >, ',' , 8 )
( 'Sep' , '=>' , <Month.Sep: 9 >, ',' , 9 )
( 'Oct' , '=>' , <Month. Oct : 10 >, ',' , 10 )
( 'Nov' , '=>' , <Month.Nov: 11 >, ',' , 11 )
( 'Dec' , '=>' , <Month.Dec: 12 >, ',' , 12 )
|
首先导入enum模块,然后声明枚举类型名及它的可能取值。还有一种方式我们定义Enum子类来定义一个枚举类。
1 2 3 4 5 6 7 8 9 10 |
>>> from enum import Enum,unique
>>> @unique
class Weekday(Enum):
Sun = 0
Mon = 1
Tue = 2
Wed = 3
Thu = 4
Fri = 5
Sat = 6
|
@unique这个装饰器是帮我们检查是否有重复的值。取出枚举类型里面的值也是多种多样的。
1 |
>>> print (Weekday.Fri)<br>Weekday.Fri<br>>>> print (Weekday( 2 ))<br>Weekday.Tue<br>>>> a = Weekday( 2 )<br>>>> print a<br>Weekday.Tue<br>>>>
|
从最后一个也可以看出定义枚举类和定义普通的类是有区别的,开头也说了枚举类型就是一组常量,我们就是为了以后方便使用将一组可能取值的常量放到一个地方,根据需要将值取出来。