一、多重继承
Python允许使用多重继承,MixIn就是一种常见的设计。
在设计类的继承关系时,通常,主线都是单一继承下来的,如果需要“混入”额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn。
MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。
#动物
class Animal(object):
pass
# 哺乳类
class Mammal(Animal):
def isMammal(self):
print('is Mammal')
#鸟类
class Bird(Animal):
def isBird(self):
print('is Bird')
# 会跑
class Runnable(object):
def run(self):
print('can run')
# 会飞
class Flyable(object):
def fly(self):
print('can fly')
# 狗狗
class Dog(Mammal, Runnable):
def info(self):
print('dog')
# 蝙蝠
class Bat(Mammal, Flyable):
def info(self):
print('bat')
#鹦鹉
class Parrot(Bird, Flyable):
def info(self):
print('parrot')
#鸵鸟
class Ostrich(Bird, Runnable):
def info(self):
print('ostrich')
if __name__=='__main__':
dog = Dog()
dog.info()
dog.isMammal()
dog.run()
print('/')
bat = Bat()
bat.info()
bat.isMammal()
bat.fly()
print('/')
parrot = Parrot()
parrot.info()
parrot.isBird()
parrot.fly()
print('/')
ostrich = Ostrich()
ostrich.info()
ostrich.isBird()
ostrich.run()
运行结果:
dog
is Mammal
can run
/
bat
is Mammal
can fly
/
parrot
is Bird
can fly
/
ostrich
is Bird
can run
二、枚举类
Python提供了Enum类来实现这个功能:
from enum import Enum
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:
for name, member in Month.__members__.items():
print(name, '=>', member, ',', member.value)
value属性则是自动赋给成员的int常量,默认从1开始计数。
如果需要更精确地控制枚举类型,可以从Enum派生出自定义类:
from enum import Enum, unique
@unique
class Weekday(Enum):
Sun = 0 # Sun的value被设定为0
Mon = 1
Tue = 2
Wed = 3
Thu = 4
Fri = 5
Sat = 6
@unique装饰器可以帮助我们检查保证没有重复值。
访问这些枚举类型可以有若干种方法:
>&g