python中super的理解,super是父类对象吗

  python中super的理解,super是父类对象吗

  我们在使用super的时候需要调用父类,导致一些朋友认为他们之间的联系是调用。那么在实际应用条件下,如何才能理解它们之间的关系呢?我们先初步看看子类调用父类时使用super()的操作,然后在代码示例中进一步了解调用的原理,从而探究两者之间的关系。

  在子类中,可以使用super关键字直接调用父类中对应的方法,简化了代码。在下面的例子中,student子类调用父类的tell()方法。超级()。tell()相当于SchoolMember.tell(self)。当使用Python super()关键字调用父类方法时,请注意删除括号中的self参数。

  #创建子类Student

  班级学生(学生):

  def__init__(自己,姓名,年龄,分数):

  学生。__init__(自己,姓名,年龄)

  self.score=分数

  deftell(self):

  超级()。tell()#相当于SchoolMember.tell(self)

  打印( score: {} )。格式(自我。分数))。你可能觉得super的用法很简单。无非就是获取父类,调用其方法。但在其他情况下,就不一定了。super实际上和父类没有实质性的关系。

  : 1.0000pt;">让我们看一个稍微复杂的例子,涉及到多重继承,代码如下:

  

classBase(object):

  def__init__(self):

  print"enterBase"

  print"leaveBase"

  

  classA(Base):

  def__init__(self):

  print"enterA"

  super(A,self).__init__()

  print"leaveA"

  

  classB(Base):

  def__init__(self):

  print"enterB"

  super(B,self).__init__()

  print"leaveB"

  

  classC(A,B):

  def__init__(self):

  print"enterC"

  super(C,self).__init__()

  print"leaveC"

其中,Base 是父类,A, B 继承自 Base, C 继承自 A, B,它们的继承关系是一个典型的『菱形继承』,如下:

  

Base

  /\

  /\

  AB

  \/

  \/

  C

  

现在,让我们看一下使用:

  

>>>c=C()

  enterC

  enterA

  enterB

  enterBase

  leaveBase

  leaveB

  leaveA

  leaveC

如果你认为 super 代表『调用父类的方法』,那你很可能会疑惑为什么 enter A 的下一句不是 enter Base 而是 enter B。原因是,super 和父类没有实质性的关联。

  

从本篇的super()调用分析中我们看出,使用super()调用父类并不代表二者有实际上的关联,这点我们可以从代码输出的结果中找到答案。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: