python教程系列(二.1.3、继承)

本文详细解析了Python中的继承概念,包括单继承、多继承、菱形继承及其解决方法,探讨了super()函数的正确使用,以及MRO列表的生成原则。

在这里插入图片描述

继承

继承就是可以获取另外一个类中的成员属性和成员方法。(并非所有成员)

作用:继承的作用是增加代码的复用性,节省不必要的重复代码,提高开发效率,同时可以设置类之间的关系。

继承的两个概念:

父类 用于被继承的类,称之为父类,也叫做基类,或者超类

子类 继承其他类的类,称之为子类,也叫做派生类

继承的格式

class 父类: pass

class 子类(父类):#继承操作的关键步骤 pass

继承的特征

1.所有类都是继承自object类(object类对应的对象就是object对象,也是万物皆对象) 2.子类继承父类则可以访问父类的所有成员。(私有成员除外) 3.子类继承父类并不会将父类的所有成员复制到子类当中去,访问父类成员是间接通过父类来访问的, 4.子类可以具有自己独有的属性和方法 5.子类可以重载父类中的方法,只需要设置和父类指定成员相同的名称即可实现重载,重载之后的成员,子类只会访问当前类中的成员,而不会调用父类中同名的成员 6.子类中如果重载父类的方法,并且还想将重载的父类方法借调过来使用,可以在重载的方法中使用如下方法父类名.方法()或者super().方法()

单继承和多继承

单继承:每个类只能继承一个类的方式称为单继承。

多继承:每个类可以同时继承多个类的方式称为多继承。

python属于多继承语言!但是一般不用

多继承格式:

class 父类1:
    pass

class 父类2:
    pass

class 子类(父类1,父类2):
    pass

多继承之后,子类就具备了所有父类的成员(私有成员除外)

多个父类具有相同的成员时,子类继承[继承列表]中第一个类的方法

菱形继承/钻石继承

菱形继承格式

class A:
    pass

class B(A):
    pass

class C(A):
    pass

class D(B,C):
    pass

    A
   / \
  B   C
   \ /
    D

菱形继承存在的问题

如果BC类同时继承了A类,D类又继承了BC两个类的情况下(菱形继承), 在调用BC中某个同名方法(该方法都继承自A类)时会导致继承自A类的该方法被多次调用。产生逻辑问题! 所以python使用 super() 类来解决了多继承的菱形继承问题

MRO列表

Method Realtion Order 用来制作一个继承关系的列表

python3中使用C3算法来计算MRO列表(计算过程暂时忽略)

MRO列表的制作原则:

1.子类永远在父类的前面

2.如果继承了多个父类,那么按照()中的顺序在列表中摆放

super()

super不是一个关键字,也不是一个函数,他是一个类

super()的作用不是查找父类,而是找MRO列表的上一个类

super()和父类没有任何实质性的关系,只是有时候能调用到父类而已。

在单继承的情况下,super()永远调用的是父类/父对象

格式:

super().方法()      #python3的格式
多继承按需操作,在没有必要的时候避免强行使用!

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值