4. 类的继承

1. 继承 Inheritance

  • 继承是面向对象程序设计的精髓之一
  • 实现了以类为单位的高抽象级别代码复用
  • 继承是新定义类能够几乎完全使用原有类属性与方法的过程

继承

2. 子类、父类、超类


子类、父类、超类

3. 类继承的构建

在定义类是声明继承关系

1
2
3
class <类名>(<基类名1>, <基类名2>):
def __init__(self, [参数列表]):
...

基类名可以带路径:ModuleName.BaseClassName

4. 类继承的使用

  • 基类的属性基本等同于定义在派生类中
  • 派生类可以直接使用基类的类属性、实例属性
  • 派生类可以直接使用基类的各种方法
  • 使用基类的类方法和类属性时,要用基类的类名调用

isinstance(obj, cls) issubclass(子类名,父类名)判断继承关系的内置函数。

Python采用深度优先、从左至右的方法实施多继承。

派生类的约束

  • 派生类只能继承基类的公开属性和方法
  • 派生类不能继承基类的私有属性和私有方法

object类是Python所有类的基类

  • object是python最基础类的名字,不要用中文去理解
  • 所有类定义时默认继承object类
  • 保留属性和保留方法本质上是object类的属性和方法

5. Python对象的三个要素

  • 标识identity:对象一旦构建不会改变,用id()获取
  • type:对象的类型,用type()获取
  • 值value:分为可变mutab与不可变immmutable

id(x)x is y的使用。

6. 类的属性的重载

  • 属性重载:派生类定义并使用了与基类相同名称的属性
  • 方法重载:派生类定义并使用了与基类相同名称的方法

原则

  • 步骤1:优先使用派生类重定义的属性和方法
  • 步骤2:然后寻找基类的属性和方法
  • 步骤3:在寻找超类的属性和方法

7. 类的方法重载

  • 完全重载:派生类完全重定义与基类名称的方法,直接在派生类中定义同名方法即可

  • 增量重载:派生类拓展定义与基类相同名称的方法

1
2
3
class <类名>(<基类名1>, <基类名2>):
def __init__(self, [参数列表]):
super().<基类方法名>([参数列表])