07-2 | 多继承和Mixin

逸兴
逸兴
逸兴
57
文章
25
评论
2020-05-2022:53:48
评论
1 830字阅读2分46秒
摘要

python多继承的继承顺序和mixin

第一章 多继承怎么继承

多继承: 子类继承多个父类。增加了复杂性

二义性:子类继承了多个父类,到底更像哪一个呢?

深度优先 和 广度优先 解决二义性。

深度优先:

07-2 | 多继承和Mixin

广度优先:

07-2 | 多继承和Mixin

python使用深度优先,通过MRO(method resolution order方法解析顺序)解决基类搜索顺序问题。

MRO将类的继承图转换为一个有序序列,这样所有的继承就有了先后顺序,优先继承前面的。实例的属性查找顺序,就是MRO的一个应用。

有三种算法,进行排序:-了解就行

  • 2.2版本之前, 直接先左后右, 深度优先策略;
    • [MyClass, D, B, A, C, A]
      • 新的问题? A到底在不在C前面,有两个A要用哪个
  • 新式类算法,经典算法的升级,深度优先,如果有重复的只保留最后一个。
    • [MyClass,D,B,A,Object,C,A,Object] 有重复的,用后面的
    • [MyClass,D,B,C,A,Object]
  • 2.3之后,C3算法,在类被创建出来的时候,就计算出一个MRO有序列表。2.3之后,python3唯一支持的算法。
07-2 | 多继承和Mixin

多继承不要设计的太复杂。一个原则:能简单的,不要复杂。

第二章 多继承的缺点

07-2 | 多继承和Mixin

抽象方法

在父类的方法中 通过 raise 抛出 NotImplementedError() , 代表这是一个抽象方法,类也是一个抽象类。这种抽象方法和抽象类,表示一种未完全实现的状态,可以在继承的子类中继续完善。只是一种标记

07-2 | 多继承和Mixin
07-2 | 多继承和Mixin

这个raise NotImplementedError 现阶段感觉在这没啥用,可能没理解对吧。

Mixin 混合继承 - 缺什么加什么

这里的Minix其实就是结合了 继承,覆盖,mro 的一种混合应用。

07-2 | 多继承和Mixin

先继承 Mixin类,这样Mixin的mro优先级高于其他类,Mixin的方法也就会覆盖其他类的方法。

这是一种设计模式,称为 Mixin。

Minix 本质上就是多继承实现的。

在面向对象的设计中,一个复杂的类,往往需要很多的功能,而这些功能来自不同的类提供,这就需要很多的类组合在一起。

从设计模式的角度来说,多组合,少继承。

07-2 | 多继承和Mixin

练习:

07-2 | 多继承和Mixin




https://www.hugbg.com/archives/2598.html
逸兴
  • 本文由 发表于 2020-05-2022:53:48
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
01-1 数据类型 基础语法

01-1 数据类型

第一章 数据类型 使用type() 函数可以查看数据类型 1.1 字符串 str 字符串是使用单引号或双引号括起来的任意文本。 比如'abc', '123'等 字符串类型 字符串类型用str表示 st...
09-5 | asyncio基本使用 并发编程

09-5 | asyncio基本使用

第一节 关于asyncio asyncio 在3.4 版本中加入到标准库, asyncio基于selector实现, 看似库, 其实是个框架, 包含异步IO, 事件循环, 协程, 任务等内容。 通过a...
09-4 | 全局解释器锁 & 多进程 & 池 并发编程

09-4 | 全局解释器锁 & 多进程 & 池

GIL CPython 在解释器进程级别有一把锁,叫做GIL,即全局解释器锁。 GIL 保证CPython进程中,只有一个线程执行字节码。甚至是在多核CPU的情况下,也只允许同时只能 有一个CPU核心...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: