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

39.python super函数

一.super函数简介 python内置函数super()主要用于类的多继承中,用来查找并调用父类的方法,所以在单重继承中用不用 super 都没关系;但是,使用 super() 是一个好的习惯。...一般我们在子类中需要调用父类的方法时才会这么用; 二.super函数语法 super(type,object-or-type) 参数: type — 类,一般是类名; object-or-type —...类,一般是 self; 返回值:无 三super函数使用 1.案例一: # !...AttributeError: 'xiaotianquan' object has no attribute 'fly' 代码分析: 虽然子类xiaotianquan继承父类Dog,但是子类直接调用父类的print_fly函数...,依然会报错,因为子类没有父类的fly属性,上面代码可以通过在__init__函数中调用super()完成,例如: class Dog:     def __init__(self):

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

    Python学习笔记之Super函数

    这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简单说, super函数是调用下一个父类(超类)并返回该父类实例的方法....在Python3中,super函数多了一种用法是直接super(),相当于super(type,首参), 这个首参就是一般的传入的self实例本身啦. 因为在py2里面常用也是这种写法....直接使用父类来调用的差异 事实上, 上面的super函数方法还可以这么写: class A(object): def __init__(self): print "enter A...因为我们同时要实现B和C的初始化函数, 所以分开调用两次, 这是必然的结果. 但如果改写成super呢?...你没看错, super 是个类,既不是关键字也不是函数等其他数据结构: >>> class A: pass ... >>> s = super(A) >>> type(s) super'

    77051

    Python的super函数直观理解

    super相关的介绍文章看了无数遍,每次看得都云里雾里的,没过多久就忘了,只模糊知道跟MRO有关,但是稍微一复杂就不知道怎么回事了,本篇文章主要记录我对super的理解,尽量以简单易懂的方式介绍,如果你看完这篇文章还是没懂...super本身其实就是一个类,super()其实就是这个类的实例化对象,它需要接收两个参数 super(class, obj),它返回的是obj的MRO中class类的父类(可能有点绕,待会看后面的栗子就好懂了...我们经常在类的__init__函数里看到super的身影,而且一般都是写成这个样子的super(className, self).__init__(),self其实就是某个实例化的对象。...) 中C类的父类:A 那么super(C, d)就等价于A,那么super(C, d).p()会输出A 栗子2 下面代码结果是什么呢?...,super()就表示前一个父类,这里就是C类,那么super().p()就会调用C的p函数,但是C.p里没有调用super,所以就与A,B类无关了,那么最终的输出就是C,D 我们再看看最复杂的继承情况

    97720

    怎么理解Python类中的super函数

    前言 在Python类的继承中,经常能看到super函数的存在,那super函数主要的作用,以及如何理解和使用好这个函数?本次教程将详细讲解,希望大家看到最后,并按照代码实际操作下。...函数 我将通过下面几个进阶的知识点让你理解super函数。...首先我们还是来总结下super函数的语法。 super(type[, object-or-type]) super(Student, self)....__init__() #python3写法 不仅仅是用于构造函数 super函数虽常用于构造函数,但是父类的其他函数一样也是可以用super函数的。...super函数和直接调用父类方法的区别 在单继承时,我们看到super和直接调用父类方法得到的结果是一样的,只是不会显式引用基类。但多重继承就不要了,我把上面的代码进行了修改,我相信你能看懂区别。

    1.5K30

    怎么用super调用超类构造函数?

    任何时候一个子类需要引用它直接的超类,它可以用关键字super来实现。super有两种通用形式。第一种调用超类的构造函数。第二种用来访问被子类的成员隐藏的超类成员。...使用super调用超类构造函数 子类可以调用超类中定义的构造函数方法,用super的下面形式:java复制代码super(parameter-list); 这里,parameter-list定义了超类中构造函数所用到的所有参数...super( )必须是在子类构造函数中的第一个执行语句。...上面的例子,调用super( )用了三个参数。既然构造函数可以被重载,可以用超类定义的任何形式调用super( ),执行的构造函数将是与所传参数相匹配的那一个。...还有,super( )必须是子类构造函数中的第一个执行语句。

    1K10

    Python面向对象编程-三大特性-继承-super() 函数

    super() 函数在 Python 中,如果一个子类要覆盖父类的方法,但又想保留父类方法的原有功能,可以使用 super() 函数。super() 函数返回一个代理对象,可以用来调用父类的方法。...下面是一个例子,演示了如何使用 super() 函数:class Shape: def __init__(self, x, y): self.x = x self.y...= y def area(self): passclass Circle(Shape): def __init__(self, x, y, r): super()...(self): return 3.14 * self.r ** 2class Square(Shape): def __init__(self, x, y, l): super...在每个子类的构造函数中,我们使用 super() 函数调用了父类的构造函数,以便正确地初始化父类的属性。在每个子类中,我们重写了父类的 area() 方法,并实现了各自特有的计算面积的逻辑。

    44330

    python学习笔记6.4-类的多重继承(super()函数)

    Python中类的继承的关键是正确使用super()函数,而这恰好是我们理解最不好的地方。...接下来用super()函数重写该段代码: class Base: def __init__(self): print('This is Base init function')...()函数时,python会继续从MRO中的下一个类开始搜索,只要每一个重新定义过的方法(比如init())都使用了super()函数,并且调用了他们一次,那么控制流最终就可以遍历整个MRO列表,并且让每个方法都只被调用一次...关于super()函数,还有一个很神奇的功能:它并不是一定要关联到某个类的直接父类上,甚至可以在没有直接父类的类上使用它。...这就说明,在使用super()函数时可能会产生我们并不想要的结果,所以我们要遵守一些基本规则来避免这些情况的发生。

    1.7K90

    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

    What is super() in JavaScript?

    说一下super super 这个关键字既可以当作函数使用,也可以当作对象使用。在这两种情况下,它的使用方法完全不同。 01 - 作为函数使用 该情况下,super作为函数调用时代表父类的构造函数。...在ES6标准之下,子类的构造函数必须执行一次super函数,请看演示代码: /*js代码*/ class Family{ constructor(name,age) { this.name...我们知道,super表示父类 Family 的构造函数,但是当在子类 Child 中使用的时候,其返回的是子类的实例,即其内部this指针指向的是子类Child,因此我们可以这样理解: super()...可以看到,在super()执行时,它指向的是子类B的构造函数,而不是父类A的构造函数,也就是说super()内部的this指向的是B,故上述结论得证。...最后,关于当super作为一个函数使用时的情况,我们在提醒最后一点:super()只能用在子类的构造函数中,用在其他地方会报错,请看错误代码: /*js代码*/ class A {} class B

    1.2K10
    领券