面向对象之继承

Posted yu-931017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象之继承相关的知识,希望对你有一定的参考价值。

面向对象的三大特征:

一、继承:

  1. 定义:继承是创建新类的方式,新建的类可以继承一个或多个父类(python中支持多继承)。
  2. 继承分为单继承(继承一个父类)和多继承(继承多个父类)
  3. 为什么要用继承:在程序中,通过继承,可以得到父类的所有属性(包括数据属性、函数属性)。
  4. 查看继承:

父类在继承中又称为基类,即基于这个父类而创建的新类,查看父类的方式:

      Sun.__bases__()(查看Sun所继承的所有基类(父类))

      Sun.__base__()(从左到右查看第一个基类(即父类))

 

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

 

二、继承与抽象

抽象:抽取多个类中的共同部分,组成一个新的类。抽象最主要的作用是划分类别。

通过抽象:得到公共部分的属性,并放到一个类中,并作为父类。

通过继承:避免了重复代码。

 

先抽象再继承,继承是基于抽象的结果,肯定先经过抽象的过程,再通过继承的方式去表达出抽象的结构

 

    分析:继承所生成的所有子类,只要基类中包含了这个父类,得到的子类肯定包含这个基类中的所有属性,也就是说,这些子类都含有某些相同属性,那么我们在考虑问题的时候,可以先把这些共同属性抽取出来,放到一个类中,并把这个类作为父类,进行继承,所以说现有抽象,再有继承。

 

 

四、派生:

定义:派生指的是子类继承某个父类,并且这个子类拥有自己独特的属性和方法(即子类类中得有自己的属性,否则与父类完全相同),得到一个派生类。

 

重用:实质是子类中再次用到父类中定义的属性,包括方法和数据。

   重用的方式有两种:

1.父类名.父类中的方法名(指名道姓)

2.super().父类中的方法名

super().方法名的方式:supper().实质是相对于一个对象,会按照对象访问属性的方式进行访问,即有先后顺序。

(Python2中,super()的用法super(子类名,self) ).方法。参数为当前类,当前对象

super用在存在继承关系的子类中。

 

查找顺序:1.对象->->父类->父类的父类。。。。。

          2.如果一个子类由多个父类,那么查找到父类级别时,顺序是从左到右。

          3深度优先,沿着一条继承路径找到底,如果没有,再找其他继承路径

          4.当存在共同父类时,会产生菱形继承关系。菱形继承关秀:先深度优先,然后再广度优先。

          

 

 

 

经典类与新式类的区别:

所有直接继承或间接继承object的类,都是新式类。(object 称之为根类,意思是所有类都源自于object类,简单的说object提供了一些常用的基础操作。)

即所有类都属于新式类(在python3中)

python3中,默认所有类都是新式类;在python2中默认是经典类:不会自动继承object

在经典类中,属性的查找按照深度优先,一条路走到黑。(Python2中才有经典类。)

 

调用.mro()该方式,会显示查找顺序。

.super()访问父类时,按照mro列表查找。

以上是关于面向对象之继承的主要内容,如果未能解决你的问题,请参考以下文章

面向对象之继承

Python面向对象编程之继承与多态详解

Java面向对象之继承

JAVA面向对象之继承

Python面向对象之继承

18.Python面向对象之:继承