1.  
  2. 主页
  3.  / 
  4. Python基础到高级
  5.  / 
  6. 面向对象
  7.  / 
  8. 继承

继承

类的继承

继承

继承可以获取父类的属性和方法,减少代码的重用

在Python3中,所有的类都是继承object的,它可以称之为是所有类的父类,object是可以省略的

父类:被继承的类,就是父类,也叫作基类或者超类

子类:继承父类的类,就是子类

类的继承方式:

  • 凡是公有的方法或者属性,都是可以继承的
  • 凡是私有的方法或者属性,都是不能继承的
  • 原来的是什么,继承过来, 就还是什么

重写

当子类和父类有同名成员的时候,子类的成员会覆盖父类的同名成员

当重写后,有需求需要调用父类的同名方法的时候,可以使用super方法来调用

当父类中含有一个带参数的初始化方法的时候,子类一定需要一个初始化方法,并且在初始化方法中调用父类的初始化方法

super获取类变量

super对象只能获取类的属性,是不能获取类实例的属性或者方法的

多继承

多继承的表达形式

多继承会把继承列表中的所有的公有成员都继承过来

在多继承中,会出现继承列表中的方法重名的情况,因此就有一个MRO(方法查找顺序)

MRO两条特性

  • 本地优先:自己定义或者重写的方法优先,按照继承列表,从左到右查找
  • 单调性:所有子类也要满足查找顺序

按照继承列表,从左到右查找调用

本地优先

单调性,每个类都有一个__mro__方法,可以查看类方法查找的顺序

在python中是通过C3算法来确定是否满足mro的两个原则的

当一个类定义的时候,解释器会执行C3算法来确定mro。如果C3算法抛出异常,则此类不能定义

在我们的开发中,要尽量的避免使用多继承,因为多继承特别容易出现代码的混乱,当代码的继承出现多层的时候,就会特别容易出错

多继承会对程序的心智负担造成非常大的压力

Mixin

Mixin其实就是一种用组合的方式,将多个父类的方法糅合到子类中,让子类可以无缝的调用父类的方法

Mixin的组合方式,在理论上来说是优于继承的

当然Mixin也是有限制的

  • Mixin方式的类不应该有初始化方法,因为是组合的因此,Mixin类重尽量不要有初始化方法,因为胡覆盖掉父类的初始化方法,发生不必须的错误
  • Mixin方式的类不能独立工作,当Mixin方式的类,在独立的情况下,是无法工作的,如果可以工作,就已经不属于Mixin方式的类的范畴了
  • Mixin方式的类的祖先也必须是Mixin的方式的类

通常情况下,Mixin类总是在继承列表的第一位

个人觉得还是尽量别使用Mixin方式来组合方法称为一个新的类来使用,因为当组合类越来越多的时候,就管理和排错我们的程序了,因此如何真的觉得Mixin方式非常适合现在的应用场景的话,在去使用,一般情况下,其实装饰器也是可以实现Mixin这样方式的组合类的,装饰器更方便与查找和管理。

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

邮箱地址不会被公开。 必填项已用*标注