面向对象编程(二)

继承

继承

继承是一种新建类的方法,新建的类称之为子类或派生类,继承的父类称之为基类或超类

--在python中,一个类可以继承多个父类
--在其他语言中,一个类只能继承一个父类

继承的作用

减少代码冗余()

继承的实现

先抽象再继承:

抽取对象之间相似的部分,总结出类

抽取类之间相同的部分,总结出父类

--在定义类子类时; class 子类名(父类名)

继承背景下对象属性的查找顺序

对象属性的查找顺序:

  1. 先从对象自己的名称空间中查找.
  2. 对象中没有,从子类的名称空间中查找.
  3. 子类中没有,从父类的名称空间中查找,若父类没有,则会报错.

ps:程序的执行顺序是由上到下的,父类必须定义在子类的上方.

派生

派生:

​ 指的是子类继承父类的属性与方法,并且派生出自己独有的属性与方法.若子类中的方法与父类的相同,优先用子类的

子类继承父类并重用父类的属性与方法问题

问题: 子类重写父类的–init–导致代码更加冗余

方法: 1.直接引用父类的–init–为其传参,并添加子类的属性.

​ 2.通过super来指向父类的属性. -super()是一个特殊的类,调用super得到一个对象,该对象指向父类的名称空间.

注意:两种方式都可以使用,但不能混合在一起使用

经典类新式类

新式类: 继承object都是新式类,python3里面都是新式类,默认继承object

经典类: 经典类只有在python2中才会存在,凡是没有继承object的都是经典类

super方法

super的继承顺序严格遵循mro继承序列,多继承情况下,从左到右.

在python3中提供了一个新式类查找顺序的内置方法.mro()会把当前类的继承关系列出来.然后按照mro列表的 顺序往后查找.

砖石继承(菱形继承)

mro 的查找顺序:

新式类: 广度优先 从左往右依次查找,查找到最后一个类时,会继续往后面的继承查找.

经典类: 深度优先 从左往右查找,会直接查找至最后一个类

在这里插入图片描述

posted @ 2019-11-26 18:02  Mr-Allen  阅读(89)  评论(0编辑  收藏  举报