#
#Enum 练习:
from enum import Enum, unique
#1、函数式API调用
# 第一个参数是枚举名称
# 第二个参数是枚举成员名称的源
Month = Enum('Month',('Jan','Feb','Mar'))
for name,member in Month.__members__.items(): # list all enum members,including aliases,既然是map自然就会有items
print(name,'=>',member,',',member.value) #value属性是自动赋给成员的int常量,默认从1开始记数
#2、自定义枚举类
@unique
#装饰器可以帮助我们检查保证没有重复值。
##如果错误,将返回:
#line 834, in unique
## (enumeration, alias_details))
##ValueError: duplicate values found in <enum 'Weekday'>: Tom -> Sun
class Weekday(Enum):
Sun = 0 # Sun的value被设定为0
Mon = 1
Tue = 2
Wed = 3
Thu = 4
Fri = 5
Sat = 6
Tom=0
#test
a=Weekday
print(a.Sun)
print(a.Sun.value)
print(a['Tue'])
print(a['Tue'].value)
print(a(0))
print(a(0).value)
for key,value in a.__members__.items():
print(key,'-',value)
##Sun - Weekday.Sun
##Mon - Weekday.Mon
##Tue - Weekday.Tue
##Wed - Weekday.Wed
##Thu - Weekday.Thu
##Fri - Weekday.Fri
##Sat - Weekday.Sat
print('-'*100)
#作业:
#把Student的gender属性改造为枚举类型,可以避免使用字符串:
class Gender(Enum):
Male = 0
Female = 1
class Student(object):
def __init__(self, name, gender):
self.name = name
if isinstance(gender,Gender):
self.gender = gender
else:
print('gender must be Gender type.')
return 0
# 测试:
bart = Student('Bart', Gender.Male)
if bart.gender == Gender.Male:
print('测试通过!')
else:
print('测试失败!')