Python入门笔记—第十章【面向对象之OOP(第四部分,MiXin)】

1 Mixin概念及作用

- 解决多重继承出现的问题

- 给一个类增加多个功能,在设计类时不再优先考虑通过复杂的多重继承机制,而是优先考虑通过多重继承来组合多个Mixin功能

假设要设计以下4种动物的类:

Dog::狗

Bat:蝙蝠

Parrot:鹦鹉

Ostrich:鸵鸟

- 按照哺乳动物和鸟类可按下面的形式划分

- 区分其中能跑和能飞的动物可按照下面形式划分:

- 按照能跑的哺乳类和能飞的哺乳类,能跑的鸟类和能飞的鸟类来划分,可按如下形式

- 如果再在类别中增加宠物类和非宠物类,那么就分类的量而言会呈指数的形式上升

- 因此,正确的做法是采用多重继承

#按照多重继承的方式来设计
class Animal():
    pass

class Mammal(Animal):
    pass

class Bird(Animal):
    pass

class Dog(Mammal):
    pass

class Bat(Mammal):
    pass

class Parrot(Bird):
    pass

class Ostrich(Bird):
    pass

- 在设计类的关系时,通常主线都是单一的继承下来的。例如Dog继承自MammalParrot继承自Bird。但是,如果需要额外"混入"其他的功能,通过多重继承就能实现。例如,让Dog继承自Mammal外,同时再具有Runnable的功能,这种设计思想称之为Mixin

- 为了能够更好的看出继承关系,通常写成RunnableMixin的形式。类似的还可以定义肉食性动物CarnivorousMixin和植食性动物HerbivoresMixin

#按照多重继承的方式来设计
class Animal():
    pass

class Mammal(Animal):
    pass

class RunnableMixin():          #Mixin设计思想
    print("Running")

class FlyableMixin():
    print("Flying")

class CarnivorousMixin():
    print("Eating meat")

class HerbivoresMixin():
    print("Eating vagetables")
 
class Dog(Mammal,RunnableMixin,CarnivorousMixin): #利用Mixin设计的思想可以让类增加多个功能
    pass
class Parrot(Bird,Flyable,HerbivoresMixin):
    pass

2 使用Mixin注意事项以及优点

2.1 注意事项

- 表示单一的功能,而不是某个物品或者说某个类别,注重功能性

- 职责单一,如果需要多个功能,则写多个Mixin

- 子类即使没有继承这个Mixin类,也能照常工作,只是缺少了某个功能

2.2 优点

- 可以在不对类进行修改的情况下,对类的功能进行扩展

- 可以方便的阻止和维护不同功能组件的划分

- 可以根据需要任意调整功能的组合

- 可以避免创建很多新的类,导致复杂的继承关系

 

本文参考于:廖雪峰以及图灵学院

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值