使用枚举类
贴两个代码吧:
>>> from enum import Enum
>>> Month1=Enum('Month2',('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'))
>>> Month1.Jan #首先要注意这里的名字要与刚开始的Month1(就是等号前面的那个)保持一致,虽然我也不知道Enum()括号里面的Month2是干嘛的,,,,
<Month2.Jan: 1>
>>> Month2.Feb #你看,当使用Month2调用时就会出错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Month2' is not defined
>>> Month1.Sep
<Month2.Sep: 9>
>>> for name,member in Month1.__members__.items(): #另外还可以使用for in循环进行遍历访问其中的元素
... print(name,'-->',member,member.value)
...
Jan --> Month2.Jan 1 分别是name(就是Enum括号里面的),member(就是Month1.name返回的值) 以及对应的member.value的值
Feb --> Month2.Feb 2
Mar --> Month2.Mar 3
Apr --> Month2.Apr 4
May --> Month2.May 5
Jun --> Month2.Jun 6
Jul --> Month2.Jul 7
Aug --> Month2.Aug 8
Sep --> Month2.Sep 9
Oct --> Month2.Oct 10
Nov --> Month2.Nov 11
Dec --> Month2.Dec 12
对于第二个例子,我们可以定义一个类,用来继承Enum
>>> from enum import Enum,unique
>>> @unique
... class Weekday(Enum):
... Sun=0
... Mon=1
... Thu=2
... Wed=3
... Thr=4
... Fri=5
... Sat=6
...
>>> Weekday.Mon
<Weekday.Mon: 1>
>>> Weekday['Mon']
<Weekday.Mon: 1>
>>> Weekday(1)
<Weekday.Mon: 1>
最后写一个作业题:
“把Student的gender属性改造为枚举类型,可以避免使用字符串:”
>>> 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
...
>>> xuan=Student('Zhangxuan',Gender.female)
>>> xuan.gender==Gender.female
True
>>>
使用元类
首先写一个hello.py文件(模块)
在里面写: