python3super用法_Python3中的super()函数详解
关于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()函数详解相关推荐
- timm 视觉库中的 create_model 函数详解
timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷,在他们开源的代码中,大部分都用到了这样一个库:timm.各位炼丹师 ...
- python input函数详解_对Python3中的input函数详解
下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...
- python的super函数详解
python基础知识 用于类继承的super函数介绍 目录 python基础知识 一.super函数的用途 二.了解super函数的基本信息 三.多继承不重复调用 四.多继承重复调用 总结 一.sup ...
- python getattr_Python中的getattr()函数详解:
标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...
- Python中的bbox_overlaps()函数详解
Python中的bbox_overlaps()函数详解 想要编写自己的目标检测算法,就需要掌握bounding box(边界框)之间的关系.在这之中,bbox_overlaps()函数是一个非常实用的 ...
- java的匿名函数_JAVA语言中的匿名函数详解
本文主要向大家介绍了JAVA语言中的匿名函数详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.使用匿名内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: ...
- Python super( ) 函数详解
目录 1 super( ) 的用途 2 了解 super 的基础信息 3 典型用法 3.1 单继承问题 3.2 单继承问题拓展 3.3 重复调用问题 3.4 super(type) 问题 1 supe ...
- 内核中的kmalloc函数详解
一.kmalloc函数详解 #include <linux/slab.h> void *kmalloc(size_t size, int flags); 给 kmalloc 的第一个参数是 ...
- 前端如何设置背景颜色的透明度 css中的 rgba() 函数详解 :background-color: rgba(255,192,203,0.3)
目录 前言 rgba() 函数 详解 再分享一个小技巧哈哈哈 前言 今天在开发移动端的时候感觉没背景颜色有点丑,再加上自己做的是蛋糕app,觉得暖色应该会很好看,于是就用了这行代码 backgroun ...
最新文章
- Apache ab压力测试工具
- 非确定性算法_使用最坏情况提高基于MPC的避障算法对参数不确定性的鲁棒性
- 笔记-知识产权与标准化知识-GB/T9385-2006计算机软件文档编制规范
- 在output 子句和 scope_identity() 混合使用的时候的注意事项
- 2_C语言中的数据类型 (六)浮点数
- django 1.8 官方文档翻译: 3-3-1 文件上传
- ProxySQL 常见表配置
- electron加载html加载不起来,Electron 预加载远程页面提升用户体验
- 漂亮的抽奖C#源代码
- GDI与DirectX对比
- kettle官方使用文档地址
- 连接/映射网络位置/共享磁盘
- HIGEN海坚驱动器维修FDA7045伺服变频器维修
- 做一个学(chou)习(ka)游戏(一)
- 用python绘制用例图源代码_用Visio画UML用例图
- Google APK下载
- 美团外卖用户差评情况分析
- 大学英语(第四册)复习(原文及全文翻译)——Unit 3 - WHY DO WE BELIEVE THAT THE EARTH IS ROUND?(我们为什么相信地球是圆的?)
- 递归算法之蜜蜂路线问题
- 关于野火开发板stm32f103VET(拂晓开发板)DAPCMSIS-DAP下载烧录程序失败的问题及解决