资讯专栏INFORMATION COLUMN

python学习笔记-多重继承和Mixin

wanghui / 1834人阅读

摘要:优先顺序模糊多重继承的优先顺序,方法调用顺序不明确。在松本行弘的松本行弘的程序世界中介绍了中类的几个原则通常的继承用单一继承第二个以及两个以上的父类必须是的抽象类中的多重继承应该也适用。

我们前面理解了类。类就是把具体事物给抽象出来。其实也有归类、类别的意思。
我们举一个例子:
人的职业有Teacher、Coder、Writer、Singer等职业
继承关系就是:

           People
   ___________|___________
  |       |       |       |
Teacher  Coder  Writer  Singer

但是有这么一类人比较特殊,白天上班码代码(Coder),晚上写文章(Writer),我们叫他为CoderWriter。
那么CoderWriter必须是继承了Coder类,也继承了Writer类。这就是多继承。
如果此时依旧是使用单继承实现起来就会比较傻(比如在People下再定义一个CodeWriter类,继承Coder类,然后再把Writer类里的代码复制过来)。
但是多重继承也不是万金油,也会带泪诸多问题:

结构复杂化
单继承中一个类的父类是什么,父类的父类是什么非常明确。多继承一个类有多个父类,父类又有多个父类,继承关系复杂。

优先顺序模糊
多重继承的优先顺序,方法调用顺序不明确。

功能冲突
当父类中有相同的方法的时候,继承的是哪个方法不明确。

为了解决上述问题,不同的编程方法采用不同的解决方法。
例如java采用只能extends一个父类,但是可以实现多个interface的方法。
python则采用Mixin的方式。
在松本行弘的《松本行弘的程序世界》中介绍了Ruby中mixin类的几个原则

通常的继承用单一继承

第二个以及两个以上的父类必须是Mix-in的抽象类
python中的多重继承应该也适用。继承反应的I am,Mixin反应的是I can。

我们可以通过Mixin的方式将某些能力添加给某一些类。

回到上面举例的例子。我们的继承关系可以这么来:

    People   
       |     Writable
       |        |
       Coder    |
       |      |——
       Somebody

这样我们即保持相对单一的继承关系,又能享受多继承带来的好处。

这篇文章仅仅是供自己加深理解使用,可能存在许多错误。还请谅解。
更多的资料可以阅读知乎上的回答:https://www.zhihu.com/questio...
或者书籍《松本行弘的程序世界》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38313.html

相关文章

  • 流畅的python读书笔记-第十章-继承优缺点

    摘要:继承的优缺点推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架。多重继承的真实应用多重继承能发挥积极作用。即便是单继承,这个原则也能提升灵活性,因为子类化是一种紧耦合,而且较高的继承树容易倒。 继承的优缺点 推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架。——Alan Kay 子类化内置类型很麻烦 (如 list 或 dict)) ,别搞这种 直接子类化内置类型(如 ...

    morgan 评论0 收藏0
  • Python学习之路31-继承的利弊

    摘要:使用抽象基类显示表示接口如果类的作用是定义接口,应该将其明确定义为抽象基类。此外,抽象基类可以作为其他类的唯一基类,混入类则决不能作为唯一的基类,除非这个混入类继承了另一个更具体的混入这种做法非常少见。 《流畅的Python》笔记本篇是面向对象惯用方法的第五篇,我们将继续讨论继承,重点说明两个方面:继承内置类型时的问题以及多重继承。概念比较多,较为枯燥。 1. 继承内置类型 内置类型...

    tinylcy 评论0 收藏0
  • REST API设计理念与 Python Mixin模式

    摘要:飞机就是一种交通工具,可飞行的能力是是飞机的属性,通过继承接口来获取语言可没有接口功能,但是它可以多重继承。说是,因为从语法上看,的确是通过多重继承实现的。所以从含义上理解,只是一个,不是一个。比如飞机照样可以载客,就是不能飞了 REST API设计理念 showImg(https://segmentfault.com/img/remote/1460000019923606);sho...

    waruqi 评论0 收藏0
  • REST API设计理念与 Python Mixin模式

    摘要:飞机就是一种交通工具,可飞行的能力是是飞机的属性,通过继承接口来获取语言可没有接口功能,但是它可以多重继承。说是,因为从语法上看,的确是通过多重继承实现的。所以从含义上理解,只是一个,不是一个。比如飞机照样可以载客,就是不能飞了 REST API设计理念 showImg(https://segmentfault.com/img/remote/1460000019923606);sho...

    iflove 评论0 收藏0
  • Python学习之路8.2-对Python类的补充

    摘要:本章主要是对上一章类的补充。对于多态的补充子类可以被看成是父类的类型,但父类不能被看成是子类的类型。仍然以类为例,动物里有哺乳动物,卵生动物,有能飞的动物和不能飞的动物,这是两种大的分类方式。一般在中,以为结尾类的都作为接口。 《Python编程:从入门到实践》笔记。本章主要是对上一章Python类的补充。 1. 从一个类派生出所有类 上一篇文章说道Python类的定义与继承一般是如下...

    liukai90 评论0 收藏0

发表评论

0条评论

wanghui

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<