关于Python3中的super()函数

我们都知道,在Python3中子类在继承父类的时候,当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法,

那么,如果我们想实现同时调用父类和子类中的同名方法,就需要使用到super()这个函数,用法为super().函数名()

下面是一个例子:

classA1():defgo(self):print("go A1 go")

classA2():defgo(self):print("go A2 go")

classA3():defgo(self):print("go A3 go")

classC(A3):pass

classB(A1,A2):pass

classD(B,C):defgo(self):print("NMSL")

super().go()d1=D()

d1.go()print(D.__mro__)

输出结果为:

NMSL

go A1 go

(, , , , , , )

这里的__mro__属性显示了当类调用方法时,如果父类和子类中有同名方法情况下的查找顺序。

如图,当我们实例化D类并调用类中的go方法时,go方法中有一条语句调用了父类的go方法,__mro__属性显示了如何查找这个方法(当然,自身类中的go方法不算),最后我们知道它调用的是A1类中的go方法,那么有些人会疑惑,为什么它不调用更近的的A3类或者A2类中go方法呢,这就要涉及到super()函数实现顺序查找的算法,这个算法即为C3算法。我的另一篇博客中记录了这个算法的原理。

假如D类中本身就没有go方法,那么我们再使用super()函数进行调用go方法,它会选择哪一个父类的呢?

代码如下:

classA1():defgo(self):print("go A1 go")classA2():defgo(self):print("go A2 go")classA3():defgo(self):print("go A3 go")classC(A3):pass

classB(A1,A2):pass

classD(B,C):defgogo(self):print("NMSL")

super().go()

d1=D()

d1.gogo()print(D.__mro__)

运行后输出结果:

NMSL

go A1 go

(, , , , , , )

可以看到结果还是这样。

如果D类中不定义方法,仅仅在类的外部通过实例调用go方法,查找过程也是一样的。

如图:

class D(B,C):

pass

d1 =D()

d1.go()print(D.__mro__)

结果:

NMSL

go A1 go

(, , , , , , )

以上就是对于super()函数的个人看法。

python3super用法_Python3中的super()函数详解相关推荐

  1. timm 视觉库中的 create_model 函数详解

    timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...

  2. python input函数详解_对Python3中的input函数详解

    下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...

  3. python的super函数详解

    python基础知识 用于类继承的super函数介绍 目录 python基础知识 一.super函数的用途 二.了解super函数的基本信息 三.多继承不重复调用 四.多继承重复调用 总结 一.sup ...

  4. python getattr_Python中的getattr()函数详解:

    标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...

  5. Python中的bbox_overlaps()函数详解

    Python中的bbox_overlaps()函数详解 想要编写自己的目标检测算法,就需要掌握bounding box(边界框)之间的关系.在这之中,bbox_overlaps()函数是一个非常实用的 ...

  6. java的匿名函数_JAVA语言中的匿名函数详解

    本文主要向大家介绍了JAVA语言中的匿名函数详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.使用匿名内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: ...

  7. Python super( ) 函数详解

    目录 1 super( ) 的用途 2 了解 super 的基础信息 3 典型用法 3.1 单继承问题 3.2 单继承问题拓展 3.3 重复调用问题 3.4 super(type) 问题 1 supe ...

  8. 内核中的kmalloc函数详解

    一.kmalloc函数详解 #include <linux/slab.h> void *kmalloc(size_t size, int flags); 给 kmalloc 的第一个参数是 ...

  9. 前端如何设置背景颜色的透明度 css中的 rgba() 函数详解 :background-color: rgba(255,192,203,0.3)

    目录 前言 rgba() 函数 详解 再分享一个小技巧哈哈哈 前言 今天在开发移动端的时候感觉没背景颜色有点丑,再加上自己做的是蛋糕app,觉得暖色应该会很好看,于是就用了这行代码 backgroun ...

最新文章

  1. Apache ab压力测试工具
  2. 非确定性算法_使用最坏情况提高基于MPC的避障算法对参数不确定性的鲁棒性
  3. 笔记-知识产权与标准化知识-GB/T9385-2006计算机软件文档编制规范
  4. 在output 子句和 scope_identity() 混合使用的时候的注意事项
  5. 2_C语言中的数据类型 (六)浮点数
  6. django 1.8 官方文档翻译: 3-3-1 文件上传
  7. ProxySQL 常见表配置
  8. electron加载html加载不起来,Electron 预加载远程页面提升用户体验
  9. 漂亮的抽奖C#源代码
  10. GDI与DirectX对比
  11. kettle官方使用文档地址
  12. 连接/映射网络位置/共享磁盘
  13. HIGEN海坚驱动器维修FDA7045伺服变频器维修
  14. 做一个学(chou)习(ka)游戏(一)
  15. 用python绘制用例图源代码_用Visio画UML用例图
  16. Google APK下载
  17. 美团外卖用户差评情况分析
  18. 大学英语(第四册)复习(原文及全文翻译)——Unit 3 - WHY DO WE BELIEVE THAT THE EARTH IS ROUND?(我们为什么相信地球是圆的?)
  19. 递归算法之蜜蜂路线问题
  20. 关于野火开发板stm32f103VET(拂晓开发板)DAPCMSIS-DAP下载烧录程序失败的问题及解决

热门文章

  1. Windows 安装redis
  2. 数据库查询新增一列默认值
  3. Linux安全技术和防火墙介绍
  4. linux 产生0~100内的随机数
  5. k8s概念: service和ingress
  6. Hadoop RPC客户端调用服务代码示例
  7. 请简短说明一下你对AQS的理解
  8. Scala Case类和对象
  9. Spring体系结构详解
  10. sql中如何统计各种零件的总数量_如何应用GOF设计模式中的构建者模式创建复合对象实例...