- 解决多重继承出现的问题
- 给一个类增加多个功能,在设计类时不再优先考虑通过复杂的多重继承机制,而是优先考虑通过多重继承来组合多个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继承自Mammal,Parrot继承自Bird。但是,如果需要额外"混入"其他的功能,通过多重继承就能实现。例如,让Dog继承自Mammal外,同时再具有Runnable的功能,这种设计思想称之为Mixin。
- 为了能够更好的看出继承关系,通常写成RunnableMixin的形式。类似的还可以定义肉食性动物CarnivorousMixin和植食性动物HerbivoresMixin
class Animal():
pass
class Mammal(Animal):
pass
class RunnableMixin():
print("Running")
class FlyableMixin():
print("Flying")
class CarnivorousMixin():
print("Eating meat")
class HerbivoresMixin():
print("Eating vagetables")
class Dog(Mammal,RunnableMixin,CarnivorousMixin):
pass
class Parrot(Bird,Flyable,HerbivoresMixin):
pass
- 表示单一的功能,而不是某个物品或者说某个类别,注重功能性
- 职责单一,如果需要多个功能,则写多个Mixin
- 子类即使没有继承这个Mixin类,也能照常工作,只是缺少了某个功能
- 可以在不对类进行修改的情况下,对类的功能进行扩展
- 可以方便的阻止和维护不同功能组件的划分
- 可以根据需要任意调整功能的组合
- 可以避免创建很多新的类,导致复杂的继承关系
本文参考于:廖雪峰以及图灵学院
相关知识
Python入门笔记—第十章【面向对象之OOP(第四部分,MiXin)】
Python实现宠物医院基础功能
使用面向对象思想设计电子宠物系统
案例驱动式Python学习笔记【第六篇】电子宠物
初识面向对象(猫咪项目)
Python学习笔记 2020.10.1
Python笔试题
Python基于大数据技术的宠物商品信息比价及推荐系统
Python爬虫实战:获取宠物领养信息和照片
计算机毕业设计django基于python的宠物分享网站
网址: Python入门笔记—第十章【面向对象之OOP(第四部分,MiXin)】 https://m.mcbbbk.com/newsview147490.html
上一篇: 养珍珠鸟必备知识:让你的小家伙健 |
下一篇: 活动招募 |