当我们需要定义常量时,一般的做法就是使用大写变量通过整数来定义,例如月份:
JAN = 1
FEB = 2
MAR = 3
APR = 4
MAY = 5...
这种做法简单,但类型仍是变量且是int类
更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum
类来实现这个功能:
>>> from enum import Enum
>>> Month = Enum('Month',('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
>>> Month
<enum 'Month'>
>>> for i in Month:
... print(i)
...
Month.Jan
Month.Feb
Month.Mar
Month.Apr
Month.May
Month.Jun
Month.Jul
Month.Aug
Month.Sep
Month.Oct
Month.Nov
Month.Dec
成员有个value属性自动给每个成员赋值为int类型从1开始。
>>> Month.Jan.value
1
>>> Month.Dec.value
12
如果需要更精确地控制枚举类型,可以从Enum
派生出自定义类:
练习
把Student
的gender
属性改造为枚举类型,可以避免使用字符串:
# -*- coding: utf-8 -*- from enum import Enum, unique @unique class Gender(Enum): Male = 0 Female = 1 class Student(object): def __init__(self, name, gender): self.name = name self.gender = gender