面向对象—继承

面向对象的重要概念

具有相似的内部状态和运动规律的实体的集合(或统称为抽象)
具有相同属性的行为事物的统称
类的构成
类(class)由三部分构成

  1. 类的名称:类名
  2. 类的属性:一组数据
  3. 类的方法:允许队进行操作的方法(行为)

对象

  1. 摸一个具体事物的存在,在现实世界中看得见摸得着
  2. 可以直接使用
    1
    2
    魔法方法_init_
    1两个下划线开始,两个下划线结束的方法,就是魔法方法,
    2__init__()就是一个魔法方法,通常用来做属性初始化 或 赋值 操作(作用)。
    3如果类面没有写__init__方法,Python会自动创建,但是不执行任何操作,
    4如果为了能够在完成自己想要的功能,可以自己定义__init__方法,
    5所以一个类里无论自己是否编写__init__方法 一定有__init__方法。
    面向对象—继承

魔法方法_str_
面向对象—继承

魔法方法_del_
面向对象—继承

继承
单继承:子类只继承一个父类
说明:虽然子类没有定义__init__方法初始化属性,也没有定义实例方法,但是父类有。所以只要创建子类的对象,就默认执行了那个继承过来的__init__方法

总结:

1子类在继承的时候,在定义类时,小括号()中为父类的名字
2父类的属性、方法,会被继承给子类
面向对象—继承

多继承:子类只继承多个父类
说明:多继承可以继承多个父类,也继承了所有父类的属性和方法

注意:
1如果多个父类中有同名的 属性和方法,则默认使用第一个父类的属性和方法(根据类的魔法属性mro的顺序来查找)
2多个父类中,不重名的属性和方法,不会有任何影响。
面向对象—继承

子类重写父类的同名属性和方法
子类调用父类同名属性和方法
面向对象—继承
面向对象—继承

子类调用父类同名属性和方法
无论何时何地,self都表示是子类的对象。在调用父类方法时,通过传递self参数,来控制方法和属性的访问修改。
面向对象—继承
面向对象—继承
面向对象—继承

Super()
子类继承了多个父类,如果父类类名修改了,那么子类也要涉及多次修改。而且需要重复写多次调用,显得代码臃肿。

使用super() 可以逐一调用所有的父类方法,并且只执行一次。调用顺序遵循 mro 类属性的顺序。

注意:如果继承了多个父类,且父类都有同名方法,则默认只执行第一个父类的(同名方法只执行一次,目前super()不支持执行多个父类的同名方法)

super() 在Python3.3之后才有的机制,通常用于单继承中的多层继承。
面向对象—继承
面向对象—继承