Python super()函数使用及多重继承

 更新时间:2020年05月06日 08:30:57   作者:但求无悔1993  
这篇文章主要介绍了Python super()函数使用及多重继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

super()函数可以用于继承父类的方法,语法如下:

super(type[, object-or-type])

虽然super()函数的使用比较简单,但是需要根据单继承和多继承来分析函数的调用关系。

首先,当类之间的继承关系为单继承时,函数调用关系也比较简单,可以参考如下的例子:

#!/usr/bin/env python3

class A(object):
  def __init__(self):
    print('class A')

class B(A):
  def __init__(self):
    super(B, self).__init__()
    print('class B')

b = B()

上述代码运行结果如下:

class A
class B

从结果可以看出,子类B在实例化时调用了父类A的__init__()方法。

当进行多重继承时,需要考虑MRO的问题。所谓MRO,即Method Resolution Order,自Python2.3以来,MRO采用广度优先(区别于深度优先)的规则定义。为了更好的理解这个问题,让我们先来看如下的代码:

#!/usr/bin/env python3

class A(object):
  def __init__(self):
    self.n = 10
  
  def minus(self, m):
    print('minus in class A start')
    self.n -= m
    print('minus in class A end')

class B(A):
  def __init__(self):
    self.n = 7

  def minus(self, m):
    print('minus in class B start')
    super(B, self).minus(m)
    self.n -= 2
    print('minus in class B end')

class C(A):
  def __init__(self):
    self.n = 12

  def minus(self, m):
    print('minus in class C start')
    super(C, self).minus(m)
    self.n -= 5
    print('minus in class C end')

class D(B,C):
  def __init__(self):
    self.n = 15

  def minus(self, m):
    print('minus in class D start')
    super(D, self).minus(m)
    self.n -= 2
    print('minus in class D end')

print('The MRO of class D is :')
print(D.__mro__)

d = D()
d.minus(2)
print(d.n)

代码运行结果:

The MRO of class D is :
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
minus in class D start
minus in class B start
minus in class C start
minus in class A start
minus in class A end
minus in class C end
minus in class B end
minus in class D end
4

从运行结果可以看出,子类D的MRO为(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>),也就是子类D的minus函数在调用父类函数时的调用顺序依次为BCA,而后续的调试打印信息也正好验证了该顺序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python读写配置文件操作示例

    python读写配置文件操作示例

    这篇文章主要介绍了python读写配置文件操作,结合实例形式分析了Python针对ini配置文件的读取、解析、写入等相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Python机器学习之KNN近邻算法

    Python机器学习之KNN近邻算法

    KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法,文中非常详细的介绍了该算法,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • 基于Python实现web网页内容爬取的方法

    基于Python实现web网页内容爬取的方法

    在日常学习和工作中,我们经常会遇到需要爬取网页内容的需求,今天就如何基于Python实现web网页内容爬取进行讲解,感兴趣的朋友一起看看吧
    2024-12-12
  • pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率

    pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率

    今天小编就为大家分享一篇pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python小球落地问题及解决(递归函数)

    python小球落地问题及解决(递归函数)

    这篇文章主要介绍了python小球落地问题及解决(递归函数),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • python入门之语句(if语句、while语句、for语句)

    python入门之语句(if语句、while语句、for语句)

    这篇文章主要介绍了python入门之语句,主要包括if语句、while语句、for语句的使用,需要的朋友可以参考下
    2015-01-01
  • pytorch中的matmul与mm,bmm区别说明

    pytorch中的matmul与mm,bmm区别说明

    这篇文章主要介绍了pytorch中的matmul与mm,bmm区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python如何利用cv2模块读取显示保存图片

    python如何利用cv2模块读取显示保存图片

    cv2模块还是一个可以进行跨平台的视觉库,可以进行人脸识别,经常在机器上被广泛应用,这篇文章主要介绍了python利用cv2读取显示保存图片的相关资料,需要的朋友可以参考下
    2021-06-06
  • 基于Python编写监控视频存储计算器

    基于Python编写监控视频存储计算器

    这篇文章主要为大家详细介绍了如何基于Python编写一个监控视频存储计算器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • Python利用matplotlib绘制散点图的新手教程

    Python利用matplotlib绘制散点图的新手教程

    这篇文章主要给大家介绍了关于Python利用matplotlib绘制散点图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论