day31

面向对象的三大特性:

  1. 继承(组合)
  2. 封装
  3. 多态

继承

分为父类和子类,一个子类可以继承多个父类,并且派生出自己的属性

__bases__是类的属性,用来查找当前类的父类

继承的目的

减少代买冗余

如何实现继承?

  1. 首先要确定好谁是子类,谁是父类
  2. 在定义类时,子类+(),()内些父类,实现继承

寻找继承关系

要想寻找继承关系,首先要“先抽象,再继承”

什么是抽象?

抽象指的是抽取相似的部分,称之为抽象

继承的关系:

继承是一系列 类 相同的特征与技能的结合体

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

  1. 对象查找属性会先从对象的名称空间中查找。
  2. 若对象没有,则会去类里面找。
  3. 若当前类时子类,并且没有对象找的属性,会去父类中查找

注意:对象查找属性,若子类有 ,不管父类有没有,以子类的为准

派生

派生指的是子类继承父类的属性,并且派生出新的属性

子类派生出新的属性,若与父类的属性相同,则以子类的为准

继承是谁与谁的关系,指的是类与类的关系,子类与父类是从属关旭

子类派生出新的属性并重用父类的属性

子类继承父类的__init__毫无意义

解决方式

方式一:

直接通过 父类.(调用)__init__,把__init__当做普通函数使用,传入对象与继承的属性

方式二:

super是一个特殊的类,在子类中调用super()会得到一个特殊的对象

用过.指向的是父类的名称空间

注意:两种方式不要混合使用

新式类与经典类(了解)

在python2中,才会有新式类与经典类之分

在python3中,所有的类都是新式类

新式类:

继承object 的类都称之为新式类

python3中,子类不继承自定义的类,默认继承object

经典类:

在python2中,凡是没有继承object的类都是经典类

mro()

属于object--》type的函数,用来查看当前类的继承顺序,在多继承的情况下

posted @ 2019-10-10 18:30  Isayama  阅读(107)  评论(0编辑  收藏  举报