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 :

(, , , , )

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为(, , , , ),也就是子类D的minus函数在调用父类函数时的调用顺序依次为BCA,而后续的调试打印信息也正好验证了该顺序。

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

本文标题: Python super()函数使用及多重继承

本文地址: http://www.cppcns.com/jiaoben/python/311885.html

python多重继承super父类参数_Python super()函数使用及多重继承相关推荐

  1. python多重继承super父类参数_python – 多重继承如何与super()和不同的__init __()参数一起使用?...

    我只是潜入一些更先进的蟒蛇科目(至少先进给我).我现在正在阅读有关多重继承,以及如何使用super().我或多或少的了解超级功能的使用方式,但(1)这样做是怎么回事? class First(obje ...

  2. dynamo python修改多个参数_python之函数

    a.sort()没有返回值.而sorted(a)是有返回值的. Python的标准比较运算符:<.<=. > .>=. ==. != 函数用法和底层分析:函数是一个可重用的程序 ...

  3. python super().__init__()参数_python类中super()和__init__()的区别

    单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(self): print 'Base create' class ch ...

  4. python super详解_Python super 详解

    说到 super, 大家可能觉得很简单呀,不就是用来调用父类方法的嘛.如果真的这么简单的话也就不会有这篇文章了,且听我细细道来. 约定 在开始之前我们来约定一下本文所使用的 Python 版本.默认用 ...

  5. python 函数参数_python之函数(二)——函数参数详解

    今天,我们要学习的是函数中的一个重要的概念--参数. 废话不多说,直接进入正题,下面我们看一段简单代码: def add(a, b): # 1 形参 sum = a + b return sum a ...

  6. python自定义函数参数_python自定义函数的参数之四种表现形式

    (1)def a(x,y):print x,y 这是最常见的定义方式,调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错 (2)def a(x,y=3 ...

  7. python语言输入两个数_python的函数输入两个参数吗

    本我我们要讨论的是关于函数的传参问题 对于函数:def fun(arg): print(arg) def main(): fun('hello,Hongten') if __name__== '__m ...

  8. python形式参数和实际参数_python学习笔记3:函数和参数

    函数 函数的参数和返回值 形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,成为形参,下例中的peison 实参(实际参数): 在调用函数的时候输入的值:下例中的明月 de ...

  9. python什么是关键字参数_Python 函数 (关键字参数)

    关键字参数 可变参数允许你传入0个或者任意个参数,这些可变参数在函数调用时会自动组装成一个tuple,而关键字参数允许你传入0个或者任意个含参数名的参数,这些参数在函数内部自动组装成为一个dict d ...

  10. python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题

    直接看代码: classPerson:def __init__(self): self.name= "jack" classStudent(Person):def __init__ ...

最新文章

  1. linux基础-延时命令:sleep
  2. Vue Angular 双向绑定检测不到对象属性的添加和删除
  3. Remote Data Access
  4. ubuntu18安装DC2016
  5. 空心点_空心砖的新玩法,看完大开眼界
  6. 李洋疯狂C语言之编程实现统计某年某月份的天数
  7. linux 端口限速技术,linux下如何实现对每个IP进行限制带宽??
  8. JAVA中的适配器应用_Java适配器模式详解和实际应用.md
  9. 可靠型园区网组网,用VRRP还是堆叠?
  10. java.sql.Date – Java SQL日期
  11. ajax里面可以alert吗,Javascript和AJAX,仅在使用alert()时有效
  12. Python微博评论进行情感分析
  13. 常见js针对浏览器之间的兼容问题
  14. 太空中的特斯拉 一个大广告?
  15. React-滑条组件使用
  16. js 事件回调函数的对象属性说明:clientX、screenX、offsetX、pageX
  17. 分享CVPR2019(附会议视频全记录)
  18. 明日之后维尔市服务器找不到,明日之后 最新服务器互通计划来袭,快来看看有你们的服务器吗?...
  19. 华为mate40RS能升级鸿蒙,华为mate40rs快速开箱
  20. Big-man酷谈overflow

热门文章

  1. 阶段3 2.Spring_10.Spring中事务控制_3 作业-基于注解的AOP实现事务控制及问题分析_下...
  2. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_2_对象的序列化流_ObjectOutputStream...
  3. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_5_同步技术的原理...
  4. poj1270_toposort+回溯
  5. linux访问ftp服务器命令
  6. href 和 src 区别
  7. 异常为当IDENTITY_INSERT设置为OFF时 解决办法
  8. 如何复制或导出托管磁盘
  9. 【NOIP 模拟赛】Evensgn 剪树枝 树形dp
  10. 几个常用的JavaScript字符串处理函数