Python面向对象-枚举类型enum

枚举类型:在实际问题中,有些变量的值被限定在一个有限的范围内。例如:一个星期有且只有7天,一年有且只有十二个月,一个班每周有6门课程等等。如果把这些量说明为整型、字符串或者其他类型显然是不合适。编程界为此提供了一种称为枚举的类型。在枚举类型定义中列举出所有可能的取值,被说明为该枚举类型的变量取值范围不能超过定义的范围。枚举是一种基本的数据类型,因为它不能再分解为任何基本类型。

python中,一般的会为枚举类型定义一个class类型,然后每个常量都是class的一个唯一的实例。Enum类实现了这个功能:

>>> 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
Feb , Month.Feb , 2
Mar , Month.Mar , 3
Apr , Month.Apr , 4
May , Month.May , 5
Jun , Month.Jun , 6
Jul , Month.Jul , 7
Aug , Month.Aug , 8
Sep , Month.Sep , 9
Oct , Month.Oct , 10
Nov , Month.Nov , 11
Dec , Month.Dec , 12

上面我们定义了一个Month类型的枚举类,然后枚举出它的所有的成员。其中,value属性是自动赋值给成员的int型常量,默认从1开始。

如果需要更精确的控制枚举类型,可以从Enum派生出自定义类,同时利用@unique装饰器帮助我们检查有没有重复值。

>>> from enum import Enum,unique
>>> @unique
... class Weekday(Enum):
...     Sun = 0
...     Mon = 1
...     Tue = 2
...     Wed = 3
...     Thu = 4
...     Fri = 5
...     Sat = 6
...
>>> day1  = Weekday.Mon
>>> day1
<Weekday.Mon: 1>
>>> print(day1)
Weekday.Mon
>>> print(Weekday.Tue)
Weekday.Tue
>>> print(Weekday['Tue'])
Weekday.Tue
>>> print(Weekday.Tue.value)
2
>>> day1 == Weekday.Mon
True
>>> Weekday(1)
<Weekday.Mon: 1>
>>> Weekday(3)
<Weekday.Wed: 3>
>>> for name,member in Weekday.__members__.items():
...     print(name,':',member)
...
Sun : Weekday.Sun
Mon : Weekday.Mon
Tue : Weekday.Tue
Wed : Weekday.Wed
Thu : Weekday.Thu
Fri : Weekday.Fri
Sat : Weekday.Sat
原文地址:https://www.cnblogs.com/hiwuchong/p/8567028.html