首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用双参数形式调用super()与直接引用方法并手动传入"self“有什么不同?

使用双参数形式调用super()与直接引用方法并手动传入"self"有以下不同之处:

  1. 参数传递方式不同:使用双参数形式调用super()时,第一个参数是当前类的类对象,第二个参数是当前类的实例对象。而直接引用方法并手动传入"self"时,只需要传入当前类的实例对象作为参数。
  2. 父类方法的查找方式不同:使用双参数形式调用super()时,会按照方法解析顺序(Method Resolution Order,MRO)从当前类的下一个类开始查找父类方法。而直接引用方法并手动传入"self"时,会从当前类的直接父类开始查找父类方法。
  3. 代码复用性不同:使用双参数形式调用super()可以实现更好的代码复用性,因为它会自动查找下一个类并调用其方法,而不需要显式指定父类。而直接引用方法并手动传入"self"则需要显式指定父类,代码复用性较差。
  4. 多继承情况下的处理不同:使用双参数形式调用super()可以正确处理多继承情况下的方法调用顺序,遵循MRO规则。而直接引用方法并手动传入"self"则需要手动指定调用的父类方法,容易出现调用顺序错误的情况。

总结:使用双参数形式调用super()可以更方便地实现代码复用和处理多继承情况下的方法调用顺序,而直接引用方法并手动传入"self"则需要显式指定父类和调用顺序,代码复用性较差。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 每日一题

题目:Python 中的继承、多态和封装 涉及问题: Python 中如何实现多继承,会有什么问题? Python 中的多态静态方法什么区别?...有点类似于 JAVA 中的参构造。但不同的是,在 JAVA 中,子类的构造函数会默认调用父类的无参构造,即在构造函数中的无论你写不写,第一句代码都是 super() 。...而一旦子类自己定义了 __init__,则不再会调用父类中的方法,如果想调用,需要手动通过 super() 来调用。...# print(c2.f) # 报错,找不到 attribute f super() 方法的说明,第一个参数是当前类,即子类,第二个参数固定 self,表示当前的实例对象,在 Python2 中必须加参数调用...# 定义一个方法参数是实例对象 ,根据参数调用对应的 run() 方法 # 也就是我们说的多态 def start_run(run_obj): run_obj.run() # 传入一个

50830

Python随记(七)Python类类的继承之简析

必须包含两种类型的形参:self形参和 其他形参 A、 self 相当于一个指向实例(对象)的引用,能够让实例访问类中的属性和方法。...B、 其他类型的参数 构造方法中的A、B之类的就都属于其他类型的参数,需要手动填写传入 在构造方法中定义的变量都需要使用self前缀,表明是这个对象的属性,供其访问。...注意:python2中的语法稍有不同super(Son,self)....表明子类Student现在一共需要传入self,persont_name,person_age,person_male,student_number这五个形参了,其中self不用我们手动传入; C、...D、 我们这里重写了show_info()这个方法, 其实就算不写,也能在实例中直接用句点符号调用这个方法,因为我们继承了父类的所有方法,但是就不会有num这个输出了。

74320

Python 学习笔记之类实例

一 定义 类 (class) 封装一组相关数据,使之成为一个整体,使用一种方法持续展示和维护。...如此做的好处就是祖先类的新增功能可以直接 【广播】给所有后代。 在继承层次的不同名字空间中允许同名成员,并按顺序优先命中。 二 字段 依照所处空间不同,我们将字段分为类型字段和实例字段。...实例方法 实例方法实例对象绑定,在其参数列表中,将绑定对象作为第一参数,以便在方法中读取或修改数据状态。在以实例引用调用方法时,无须显式传入第一实参,而由解释器自动完成。...__name = name def get(self): #以实例引用调用,自动传入 self 参数 return self....其既不接收实例引用,也不参与类型处理,所以就没有自动传入第一参数使用静态方法,更多原因是将类型作为一个作用域,或者当前类型添加便捷接口。

41310

Python 函数式编程和面向对象编程

__init__()方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法)。...__name = name def get_name(self): #它的第一个参数永远是 self,指向调用方法的实例本身 return self....但是,如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在 Python 的类中被称为特殊属性,很多预定义的特殊属性可以使用,通常我们不要把普通属性用"...要定义关键字参数使用**kw; 除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过 setattr(self, 'name', 'xxx')设置属性。...函数super(Student, self)将返回当前类继承的父类,即 Person,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出

1.1K20

Python面试必刷题系列(4)

作用域:通过实例化的对象进行方法调用调用后开辟的空间不会释放,而函数则不同,函数执行完后,为其开辟的内存空间立即释放(存储到了栈里)。...总结: @staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。 @classmethod也不需要self参数,但第一个参数需要表示自身类的cls参数。...如果想调用指定某个父类中被重写的方法,可以给super()传入两个实参:super(A_type, obj),其中,第一个实参A_type是个类对象,第二个实参obj是个实例对象,这样,被指定的父类是:...python很多内置魔法方法,一般表现为下划线开头和结尾。这些魔法方法会让对象持有特殊行为,使python的自由度变得更高。...分代回收: python中垃圾回收的时机两种:手动回收和自动回收。

67220

Python3入门学习三.md

[TOC] 10.Python 文件操作处理 描述: 我们所知道常用的操作系统Windows,Mac,LINUX,UNIX,这些操作系统底层对于文件系统的访问工作原理是不一样的,因此您可能要针对不同的操作系统来考虑使用那些系统模块...但是Python中有了OS模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块调用。...; self参数的作用是绑定方法,了这个参数Python 再也不会傻傻分不清是哪个对象在调用方法了,self 其实就是实例对象的唯一标志。...属性”或者“类名.方法名()”引用使用相关的属性或方法。...12.6 修饰符(装饰器) 修饰符是一个很著名的设计模式,经常被用于切面需求的场景,较为经典的插入日志、性能测试、事务处理等;了修饰符我们就可以抽离出大量函数中函数功能本身无关的雷同代码继续重用

60230

类和对象

(3) 多态 可以对不同类的对象调用相同的方法,产生不同的结果。 ? 二、面向对象编程 1,self什么 ?...根据一张图纸可以设计成千上万的房子,但是都有不同的主人,每个人都只能回自己的家,self 就相当于每个房子的门牌号,self 就可以轻松的找到自己的房子。...简单的说,组合用于“ 一个 ”的场景中,继承用于“ 是一个 ”的场景中。例如,天上有一个鸟,地上有只狗,这些适合使用组合。青瓜是瓜,鲨鱼是鱼,这些就应该使用继承。 8,类对象是什么时候产生的?...当你这个类定义完的时候,类定义就变成类对象,可以直接通过 “ 类名 . 属性 ” 或者 “ 类名 . 方法名 () ” 引用使用相关的属性或方法。 9,区分类属性实例属性。 ?...第二种方法直接使用 getattr(object, name[, default]) 函数设置 default 参数(返回对象指定的属性值,如果指定的属性不存在,返回default(可选参数)的值)

85220

3.Python3基础入门学习笔记(三)

[TOC] 10.Python 文件操作处理 描述: 我们所知道常用的操作系统Windows,Mac,LINUX,UNIX,这些操作系统底层对于文件系统的访问工作原理是不一样的,因此您可能要针对不同的操作系统来考虑使用那些系统模块...但是Python中有了OS模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块调用。...; self参数的作用是绑定方法,了这个参数Python 再也不会傻傻分不清是哪个对象在调用方法了,self 其实就是实例对象的唯一标志。...属性”或者“类名.方法名()”引用使用相关的属性或方法。...12.6 修饰符(装饰器) 修饰符是一个很著名的设计模式,经常被用于切面需求的场景,较为经典的插入日志、性能测试、事务处理等;了修饰符我们就可以抽离出大量函数中函数功能本身无关的雷同代码继续重用

35410

django的类视图-11

,便于理解,但是当一个s视图多种请求方式的时候,变需要使用分支来编写不同请求方式对应的逻辑。...使用类视图 基于类的视图的核心是允许你用不同的实例方法来响应不同的HTTP请求方法,而不是在一个视图函数中使用条件分支代码来实现。...如果向上边的类视图发送一个 GET 请求,他会把 GET 转换为小写形式并和类中的方法进行匹配,然后匹配到 get 方法,会把 get 方法引用返回到 as_view 调用处。...所以在 get 请求下最后 as_view 是 get 方法引用。 类视图使用装饰器 可以使用装饰器为类视图增加功能,使用装饰器三种方式。...('装饰器被调用') return func(self, request, *args, **kwargs) return wrapper 装饰所有方法 可以重写装饰类的 dispatch

74130

9-面向对象1

当__init__其他参数时,在创建实例的时候,就不能传入空的参数了,必须传入__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去: >>> bart = Student...__init__()方法,在创建一个对象时默认被调用,不需要手动调用 __init__(self)中,默认第一个参数永远是self,如果__init__(self)中除了self外还有其他参数,则在创建对象实例的时候...,所以必须要以最后一个__init__()的形式进行实例化 访问限制 在类内部,可以属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。...从运行结果可以看到,当子类和父类存在相同的方法时,子类的方法会覆盖父类的方法,在代码运行时总是会调用子类的方法,这个称为多态。 那么,多态什么好处呢?...实例方法需要将类实例化后调用,如果使用直接调用实例方法,需要显式地将实例作为参数传入。 最左侧传入参数self,是实例本身。

37130

day22-day28-面向对象

__dict__) # 随便看看,调用 __dict__ 方法,以字典的形式查看当前对象的属性super(Dog, two_ha).eat() # 直接使用被继承的父类方法day25-继承规范from...__get_pwd()# 所有的私有的属性或者方法都是在变量的左边加上下划线# 所有的私有属性和方法只能在类里面被使用,外部不能够直接调用类内部的私有属性或者方法# 外部想要调用,则写一个方法get到类内部的属性或者方法...__discount @classmethod # 使用 classmethod 装饰,即代表这个方法只是用来修改类的静态变量属性的,可被类名直接调用 def change_discount...2.调用__init__()方法来进行实例对象的初始化,__init__(self)接收的就是new方法return出来的那个创建好的对象的引用。 返回对象的引用。''''''...我们比较两个方法参数,可以发现__new__方法传入类(cls),而__init__方法传入类的实例化对象(self),而有意思的是,__new__方法返回的值就是一个实例化对象ps:如果__new

37450

python——类

另外,这个函数会在类实例化对象的时候被调用。(类比于C++,其实该函数就是类的构造函数)在Python中两边下划线的函数都是python默认的方法,用这种方式来避免和普通的方法发生冲突。...这个函数中有一个self参数,这个参数是必不可少的,并且必须放在第一个位置。这个参数将在Python调用这个方法创建实例时,自动传入。每个和实例相关联的方法在被调用的时候,都会自动传入self参数。...self参数是指向实例本身的引用(类比于C++,self参数其实就是C++的this指针),能让实例访问类中的属性和方法。 例如下面的get()函数,它也有self参数。...我们在调用的时候是不需要传入self参数的。下面是一个例子,创建了一个对象,调用了get()方法。...接下来对上面的代码进行部分说明,子类调用父类的构造函数使用super()方式,调用父类的set函数也是使用super()方式。子类还可以定义自己的属性和方法,例如:time属性,func方法

61220

Python 类继承

「python中一切皆对象」 类对象 self参数 self参数用于对当前类中实例的引用,必须作为该类中任何函数的第一个参数,但可以不必命名为 self class A: def add(self...,Python 解释器会首先调用 __new__ 方法为对象分配空间,返回对象的引用,Python 解释器在获得对象的引用后,将引用作为第一个参数,传递给 __init__ __new__ 通常用于控制生成一个类实例的过程...装饰器来进行修饰,无须传入 self参数即可创建方法。...在定义时,使用 @classmethod 装饰器进行修饰,同时需要指定传入第一个参数为 cls(命名可以自定义),在调用过程中,可以直接通过 类名.方法名 进行调用,也可以在实例化后通过 实例名.方法名...(aa) # 显式传入实例名作为参数 # 1 # abc 18 函数魔法方法 super() 用来调用父类(超类)的方法,若父类和超类中有同名方法,优先调用父类 Python2 用法:super(父类

69740

JDK1.9-方法引用

:拿什么参数什么操作。...既然Lambda希望做的事情就是调用 println(String) 方法,那何必自己手动调用呢? 2.3 用方法引用改进代码 能否省去Lambda的语法格式(尽管它已经相当简洁)呢?...注:Lambda 中 传递的参数 一定是方法引用中 的那个方法可以接收的类型,否则会抛出异常 推导省略 如果使用Lambda,那么根据“可推导就是可省略”的原则,无需指定参数类型,也无需指定的重载形式...下面这段代码将会调用 println 方法不同重载形式,将函数式接口改为int类型的参数: ? 由于上下文变了之后可以自动推导出唯一对应的匹配重载,所以方法引用没有任何变化: ?...super调用时,也可以使用方法引用进行替代。

40210

前端面试指南之React篇(一)

为了使整个更新过程可随时暂停恢复,节点树分别采用了 FiberNode FiberTree 进行重构。fiberNode 使用链表的结构,可以直接找到兄弟节点子节点。...props这个参数super调用super(props),否则只需要写super()React.Children.map和js的map什么区别?...ref三种实现方法:字符串格式:字符串格式,这是React16版本之前用得最多的,例如:span函数格式:ref对应一个方法,该方法一个参数,也就是对应的节点实例...该函数会被传入 next 的下一个 middleware 的 dispatch 方法返回一个接收 action 的新函数,这个函数可以直接调用 next(action),或者在其他需要的时刻调用,甚至根本不去调用它...调用链中最后一个 middleware 会接受真实的 store的 dispatch 方法作为 next 参数借此结束调用链。

70450

Python的面向对象

self.name 实例变量:对象相关 self.age = age self.age 实例变量:对象相关 s1 = Student('a',1) 作为实例变量传入...,类方法关联的是类本身 另外,两者有时候都可以完成参数修改,但是要是操作“意义”有时就需要区分类方法和实例方法,例如与对象无关的操作就应该使用方法 即,对象最好不要调用@classmethod...() # 类调用方法 且访问了类变量 不可以引用实例变量 注意: 静态方法不要经常使用类的关联性不强,普通函数无区别 类成员的可见性 对于下面示例: class Student...__init__(self,name,age) #直接调用父类构造函数 传参 #注意此处父类构造参数要加上self,此处是!普通函数的调用!...__init__(self,name,age) 上述使用类,调用了实例方法,其实不推荐这样做,如果类调用一个实例方法,那么实例方法self 参数会成为一个普通参数调用时应该被传入方法

42340

Python面向对象编程-完整版

在Class内部,可以属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 面向对象的本质:对行为和数据的封装;有时候数据就是数据;而有的时候行为就是行为。...类方法可以被实例使用,并且被实例使用时,传入的第一个参数还是类。...,会传入实例本身作为第一个参数; # 类调用方法的时候,不会传递本身作为第一个参数; # @classmethod 装饰器会向方法传递一个参数,传递的是类本身; 方法的作用域都属于类级别,具体是实例方法...除非真的必要,并且清楚知道会有什么后果,否则不要用这个黑魔法。...可以使用super()方法super()方法返回super对象,可以使用super对象调用父类的方法

1.2K30

Python教程(23)——Python类中常用的特殊成员

= arg2 # ... self 代表对象本身,arg1、arg2 等是用于接收传入参数的形参,我们可以根据实际需要为 __init__ 方法传入不同参数。...__repr__ __repr__ __str__ 方法类似,下面直接用一个例子来说明这个和 __str__ 的区别。...当我们像调函数一样使用对象时,Python 解释会自动调用对象的 __call__ 方法,并将传入参数作为参数递给该方法。我们可以在 __call__ 方法中定义对象的调用逻,然后执行相应的操作。...在该方法中,我们将传入的两个参数进行相加,Python 解释器会自动调用对象 add 的 __call__ 方法,并将传递给该方法。...__call__ 方法中的逻辑会被执行,参数进行相加操作,然后返回结果。 通过使用 __call__ 方法,我们可以将一个对象实例化后,即可像函数一样进行调用执行预定义的逻辑。

9210

iOS - 关于 KVO 的一些总结

(即一次修改两次触发) ** context: 可以传入任意数据(任意类型的对象或者C指针),在监听方法中可以接收到这个数据,是KVO中的一种传值方式 如果传的是一个对象,...context */ } 2.3 移除方法调用注册方法后,KVO并不会对观察者进行强引用,所以需要注意观察者的生命周期。...当我们要使用KVO监听成员变量值改变的时候,可以通过在为成员变量赋值的前后手动调用willChangeValueForKey:和didChangeValueForKey:两个方法手动触发KVO,如:...KVO的使用注意 4.1 移除观察者的注意点 在调用KVO注册方法后,KVO并不会对观察者进行强引用,所以需要注意观察者的生命周期。...KVO的注册方法和移除方法应该是成对的,如果重复调用移除方法,就会抛出异常NSRangeException导致程序Crash。

2.4K21
领券