首页
学习
活动
专区
圈层
工具
发布

python的super()的作用和原理

今天我们介绍的主角是super(), 在类的继承里面super()非常常用, 它解决了子类调用父类方法的一些问题, 父类多次被调用时只执行一次, 优化了执行逻辑,下面我们就来详细看一下。...为了解决这些问题,Python引入了super()机制,例子代码如下: class FooParent: def bar(self, message): print(message)...1super ()机制是用来解决多重继承的,对于直接调用父类名是没有问题的,但在之后根据前人的经验就是:要么都用类名调用,要么就全部用super(),不要混合的用,由此为人做事还是要专一的嘛O(∩_∩)...O~ 2 super()继承只能用于新式类,用于经典类时就会报错。...新式类:必须有继承的类,如果无继承的,则继承object 经典类:没有父类,如果此时调用super就会出现错误:『super() argument 1 must be type, not classobj

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java super继承

    参考链接: Java super super关键字  super的用法和this很像  this代表本类对应的引用。...super代表父类存储空间的标识(可以理解为父类引用) 用法(this和super均可如下使用)  访问成员变量 this.成员变量 super.成员变量  访问构造方法(子父类的构造方法问题讲) this...(…) super(…)  访问成员方法(子父类的成员方法问题讲) this.成员方法() super.成员方法()  子类中所有的构造方法默认都会访问父类中空参数的构造方法:  因为子类会继承父类中的数据...所以,子类初始化之前,一定要先完成父类数据的初始化每一个构造方法的第一条语句默认都是:super() 继承中构造方法的关系  如果父类中没有构造方法  子类通过super去显示调用父类其他的带参的构造方法子类通过...this去调用本类的其他构造方法 本类其他构造也必须首先访问了父类构造  super(…)或者this(….)必须出现在第一条语句山 否则,就会有父类数据的多次初始化  例子:  class Father

    95030

    深入理解Python虚拟机:super超级魔法的背后原理

    super 类作为Python虚拟机中强大的功能之一,super 可以说是 Python 对象系统基石,他可以帮助我们更灵活地使用继承和方法调用。...super类的工作原理-Super 设计的目的 要理解super类的工作原理,我们需要了解Python中的多重继承和方法解析顺序(Method Resolution Order,MRO)。...Super 类的的签名为 class super(type, object_or_type=None),这个类返回的是一个 super 对象,也是一个代理对象,当使用这个对象进行方法调用的时候,这个调用会转发给...Super 和栈帧的关系 需要注意的是我们在一个类的__init__方法当中并没有给 super 任何参数,那么他是如何找到 super 需要的两个参数呢?...是 Python 面向对象编程当中非常重要的一部分内容,在本篇文章当中详细介绍了 super 内部的工作原理和 CPython 内部部分源代码分析了 super 的具体实现。

    61260

    总结this与super

    其实很多时候this和super往往是默默无闻的,在很多情况下是被省略的。...比如: 本类方法调用本类属性 本类方法调用另一个本类方法 子类构造方法隐含调用super() 任何类在初创期,都有一个默认的空构造方法,同时super方法的一条默认通道。...构造方法的参数列表决定了调用通道的选择,如果子类调用父类的某个构造方法,super就会不断往上溯源;如果没有指定,则默认调super方法。如果父类没有提供默认的构造方法,子类集成会报错。...由于this和super都在实例化阶段调用,所以不能在静态方法和静态代码块中出现this.和super关键字。...但是super也有自己的特点,在子类中覆写父类方法时候,可以使用super调用父类同名的实例方法,下面总结一下this和super的异同点: ?

    98730

    Linux mmap原理

    Linux mmap原理 前言 Linux段页式内存管理 mmap mmap内存映射原理 文字概述 mmap函数参数介绍 源码解析 1. 文件映射 2....,但是并没有深入理解mmap在操作系统内部是如何实现的,原理是什么。...本文想要和大家一起来聊聊mmap的原理,本文整体脉络如下: linux段页式内存管理回顾 mmap原理 ---- Linux段页式内存管理 这里的段页式内存管理主要基于linux 0.11进行讲解...(作者本人并非主攻linux,所以只是对linux 0.11略有研究) 无论是现代操作系统还是最早的linux 0.11操作系统,在对于物理内存的管理,都是将物理内存按页划分,如下图所示:...下面我们通过一幅图来对 mmap 的原理进行阐述: 从上图可以看出,mmap 的原理就是将虚拟内存空间映射到文件的页缓存,我们可以知道:对文件进行读写时需要经过页缓存进行中转的。

    4.9K21

    Python super(钻石继承)

    而且重要的是,相比原来的普通写法,super方法并没有写额外的代码,也没有引入额外的概念  4.   super的内核:mro  要理解super的原理,就要先了解mro。...super(object)   |  super(type, obj) -> bound super object; requires isinstance(obj, type)   |  super...那super究竟应该怎么用呢,我们重点来看super中的第1和第3种用法  5.1. super(type, obj)  当我们在Leaf的__init__中写这样的super时:  class Leaf...小结  至此,我们讲解了和super相关的用法及原理,小结一下我们讲过的内容有:  python调用父类成员共有2种方法:普通方法,super方法在钻石继承中,普通方法会遇到Base类两次初始化的问题简述了其他语言对这个问题的解决方法...,并用实例展示了python使用super可以解决此问题在讲super具体用法前,先讲了super的内核:mro的知识和原理讲解了super两种主要的用法及原理  原文链接:http://www.cnblogs.com

    1.2K00

    面试题:Java中this和super关键字的底层实现原理

    p=5028 今天,我们就一起来讨论一个这个网友遇到的面试题,Java 中 this 和 super 关键字的底层实现原理! 众所周知,在 Java 中,this 具有以下含义。...这也验证了 this 的底层实现原理。 同理,super 的本质是:当我们 new 一个子类对象的时候,子类除了生成一个 this 引用指向自身,还会生成一个指向其直接父类对象的引用 super。...如果子类存在与父类同名的方法和成员变量时,要想区别访问父类和自身的变量和方法,需要使用 super 关键字调用父类的方法和属性。 这些在字节码中都有体现。...super 关键字的底层原理就是靠 INVOKESPECIAL 指令。 在 Codedq 的代码中,super 就是靠 INVOKESPECIAL 指令来调用父类方法的。...最后,我们来个简单的总结,this 的底层实现是默认传值,super 是靠 INVOKESPECIAL 指令。

    1.4K10
    领券