Python 高级 01- 深入类和对象

内容

1.鸭子类型与多态

  • 鸭子类型
    • 多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚"鸭子类型"
    • 动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。
  • 多态
    • 定义时的类型和运行时的类型不一样,就称为多态。
      Python 高级 01- 深入类和对象
      Python 高级 01- 深入类和对象

2. 抽象基类(abc模块)

  • 抽象基类介绍

  • 抽象基类(abstract base class,ABC):抽象基类就是类里定义了纯虚成员函数的类。纯虚函数只提供了接口,并没有具体实现。抽象基类不能被实例化(不能创建对象),通常是作为基类供子类继承,子类中重写虚函数,实现具体的接口。

  • 抽象基类就是定义各种方法而不做具体实现的类,任何继承自抽象基类的类必须实现这些方法,否则无法实例化。
    Python 高级 01- 深入类和对象

  • 抽象基类应用场景

    • 1.我们去检查某个类中是否有某种方法
    • 2.我们需要强调某个子类必须实现某些方法
  • 1.检查某个类中是否有某种方法

    • 定义Demo类,类中含有__len__魔法方法
    • 导入抽象基类中的Sized类
      Python 高级 01- 深入类和对象
  • hasattr() 函数 是否含有某种方法
    Python 高级 01- 深入类和对象

  • 2.强制子类必须实现父类的方法

Python 高级 01- 深入类和对象
Python 高级 01- 深入类和对象

3. type与isinstance区别

  • type 不考虑 继承关系
  • isinstance 考虑继承关系
    Python 高级 01- 深入类和对象
    Python 高级 01- 深入类和对象

4. 类属性与实例属性

  • 基本查找顺序

    • 对象是可以向上查找的,所以可以访问到类属性
      • 当对象自己有该实例属性时 ,则输出的是自己的
    • 类不能向下查找,所以只能访问到类属性
  • 多继承查询顺序
    继承关系如下,则属性查找顺序为?
    Python 高级 01- 深入类和对象
    实际上,python2.2(金典类)之前的算法:MRO算法,DFS(deep first search) 深度优先。
    Python 高级 01- 深入类和对象
    如下图,菱形继承,执行顺序如何?
    Python 高级 01- 深入类和对象
    在python2.2版本之后,引入BFS(广度优先)。
    在python新式类,就引入了C3算法,通过className.__mro__来查看。
    Python 高级 01- 深入类和对象

5. super函数

Python 高级 01- 深入类和对象
Python 高级 01- 深入类和对象