面向对象之继承

Posted on 2019-03-02 00:52  杜卡迪S11  阅读(87)  评论(0编辑  收藏  举报

一、何为继承?

继承是一种创建新类的方式,新建的类可以继承一个或者多个父类。父类也可以叫做基类或者超类,新建的类称为派生类或者子类。

子类会遗传父类的属性,所谓继承就是为了解决代码重用问题(解决了代码冗余问题)

class ParentClass1:#定义父类

  pass 

class ParentClass1:定义父类

  pass

class SubClass1:(ParentClass1):#单继承,父类为ParentClass1,子类是SubClass1

  pass

class SubClass1:(ParentClass1,ParentClass2):#多继承,逗号分隔开多个继承的类

  pass

查看继承:

SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类

(<class '__main__.ParentClass1'>,)

SubClass2.__bases__

(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)

二、经典类和新式类

1.只有在python2中才分新式类和经典类,python3中统一都是新式类

2.在python2中,没有显示的继承object类的类,以及该类的子类,都是经典类

3.在python2中,显示地声明继承object的类,以及该类的子类,都是新式类

4.在python3中,无论是否显示继承object,都默认继承object,即python3中所有类均为新式类

提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现

 三、继承与抽象(先抽象再继承)

继承描述的是子类与父类之间的关系,如果要描述这层关系,就必须先继承再抽象。

 

抽象就是抽取类似或者比较像的部分

抽象最主要的作用就是划分类别,这一点可以 隔离关注点,降低复杂度

继承:继承是基于抽象的结果。(没有抽象就没有继承),我们通过抽象可以得到类

 

如果继承关系时菱形结构时,那么属性的查找方式为两种,分别是深度优先和广度优先

当类是经典类时,多继承情况下,在要查找属性不存在时,会按照深度优先去查找

当类是新式类时,多继承情况下,在要查找的属性不存在时,会按照广度优先去查找