python全栈day16——面向对象继承

复习重点:
1.只要对象的某个属性被直接赋值,那么一定是对象的命名空间发生变化。
2.只要是静态变量,就用类名直接操作它。

面向对象的三大特性——继承

1.继承和抽象

抽象:抽取事物类似或者比较像的的部分。

继承:是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构

2.单继承

#继承与重用:

 父类中的属性和方法都可以被子类使用。

#继承与派生

 定义:子类在父类的基础上又新创建了自己需要的方法和属性。
  1.当子类中又要被调用的方法时,子类对象会直接选择子类中的方法或者变量,
  2.父类中的变量和方法不会被自动执行
  3.如果我们既想要执行子类方法,也想执行父类的方法,那么需要在子类的方法中调用父类的同名方法。
  4.调用方法:
   1)父类.方法名(self,...)需要传入self
   2)super().方法名(...)不需要传入self
   3)情况分析:
    (1)子类有的父类没有:这个时候直接对象直接使用子类的属性或者方法。
    (2)子类有的父类也有:如果对象需要使用子类的方法或属性可以直接调用,但是如果需要调用父类的方法或者属性就需要使用:父类.方法名(self,...)需要传入self或者super().方法名(...)不需要传入self。

#规范的编程模式

  #抽象类    

  1,运用场景:多人开发、复杂的需求、后期的扩展在工作中;
  2,应用:
  抽象类是一个规范它基本不会实现什么具体功能,抽象类是不能被实例化的
  3,步骤
    1.在文件头声明:from abc import ABCMeta,abstractmethod
    2.在抽象类创建的时候指定metaclass = ABCMeta
    3.在类中需要规范子类的函数头前加上装饰器@abstractmethod

3.多继承

#语法

  不是所有语言都支持多继承,java就不支持,C++就支持多继承

#接口类

  python中允许多继承的使用,所以不需要使用接口

#新式类和经典类

  在python3中,所有类都是新式类,所有的新式类都有一个默认的父类:object
  而在python2x中,在2.7中经典类和新式类并存。
  在python2中:
   class Studet:pass被默认为经典类
   要变成新式类必须这样写:class Studet(obj):pass

#多继承的顺序,新式类和经典类的区别

  新式类中的所有的多继承关系寻找方法的顺序为广度优先,遵循mro算法
  注意:super不是单纯的找父类,而会遵循mro的顺序
  python2中不提供mro和super

  新式类和经典类的区别:

  新式类:
  1)所有的多继承关系寻找方法的顺序—遵循广度优先算法;
  2)继承object;
  3)mro方法;
  4)super:super不是单纯的找父类,而是遵循mro顺序。

  经典类:
  1)python2.x
  2)不主动继承object
  3)经典类在找父类中方法的过程中—遵循深度优先算法;
  4)不提供mro方法和super

原文地址:https://www.cnblogs.com/abner28/p/9549159.html