day 20

day 20 面向对象的三大特性 (继承,封装,多态)

01.继承

  1. 什么是继承

    1. 继承指的是新建立的方法,新建的类称之为子类或者派生类,自类继承的类叫做父类,也称之为基类或超类。
    2. 继承的特征;
      1. 子类可以继承父类的属性(特征与技能(变量与函数)),并且可以派生出自己的属性
      2. 一个子类可以继承多个父类(python的特性)
  2. 为什么要继承

    1. 继承的目的是为了减少代码的冗余(代码的重复)
  3. 如何实现继承

    1. 首先要确定好谁是子类,谁是父类。
    2. 在定义类时,子类+(),()内写括号父类,实现继承。
    class fu:
      xx='xx'
    class f2:
      zz='zz'
    class zl(fu):
      yy='yy'
    class z2(fu,f2): # 继承多个父类
      dd='dd'
    
  4. 查看继承的父类,__bases__(以元组的形式)

class F1:
    pass
class F2:
    pass
class Z1(F1,F2):
    pass
print(Z1.__bases__)
(<class '__main__.F1'>, <class '__main__.F2'>)
  1. 如何寻找继承关系;
    1. 想要寻找继承关系,现抽象在继承
  2. 抽象;
    1. 抽取相同的属性,定义为父类
  3. 在程序中继承
    1. 对象——>调用类——>继承父类
  4. 继承的关系;
    1. 对象是一些列相同的特征和技能的结合体
    2. 类是一些列又有相同特征和技能的对象结合体
    3. 继承类是一些列又有相同特征和技能的类结合体
  5. 继承背景下对象属性查找顺序
    1. 对象本身的空间——>类空间——>父类空间——>报错
  6. 派生
    1. 派生指的是子类在继承父类属性基础上,拥有自己的属性
    2. 子类派生出的属性若与父类的相同,则以子类的为准
  7. 派生状态下继承的用法
  8. 新式类与经典类
    1. 新式类;所有继承object的类,python3中都是新式类
    2. 经典类;在python2中只要没有继承object都是经典类
  9. 再多继承情况下的查看当前类的继承顺序 mro()
    1. 从左到右
    2. 查找顺序;本身——>从左到右的父类——>object——>报错
    3. 子类. mro() # 查看字类的继承顺序,mro继承自object(type与object相互继承)
  10. 菱形继承的继承顺序
    1. 在多继承的情况下形成的
    2. 在经典类和新式类下的继承顺序不同
      1. 经典类会根据深度优先(一条线一条线找,第一条线就找到根类)
      2. 新式类会根据广度优先(一条线一条线找,最后一条线才找到根类)(继承object的那个类)
      3. 最后才寻找继承object的那个类
原文地址:https://www.cnblogs.com/luocongyu/p/11668785.html