父类中的方法被覆盖以及子类调用父类覆盖的方法

Posted zengsf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了父类中的方法被覆盖以及子类调用父类覆盖的方法相关的知识,希望对你有一定的参考价值。

覆盖 override
  覆盖是指在有继承关系的类中,子类中实现了与基类同名的方法,在子类的实例调用该方法时,实际调用的是
  子类中的覆盖版本,这种现象叫做覆盖


调用super 函数的两个方法:
  1.super(cls, obj) 返回绑定超类的实例(要求obj必须是cls类型的实例)
  2.super() 返回绑定超类的实例,等同于: super(__class__, 实例方法的第一个参数), 必须在方法内调用

作用:
  可以用super() 返回的实例间接调用其父类的覆盖方法

 

class A:
   def work(self):
     print("A.work")
class
B(A): def work(self): print("B.work") def super_work(self): self.work() #调用父类的work方法 super(B, b).work() super().work() #这种调用父类的方法只能在方法中调用 super(self.__class__, self).work() b = B() b.work() print("------") A.work(b) #对象b调用A类里面的work方法 print("++++++") super(B, b).work() print("******") b.super_work() 输出结果; [email protected]:~/zengsf/824$ python3 exercise824_2.py B.work ------ A.work ++++++ A.work ****** B.work A.work A.work A.work

 










以上是关于父类中的方法被覆盖以及子类调用父类覆盖的方法的主要内容,如果未能解决你的问题,请参考以下文章

Java中的覆盖和隐藏以及final关键字

delphi中覆盖override父类的静态方法和虚函数有啥不同?

在子类中,若要调用父类中被覆盖的方法,可以使用super关键字

java覆盖和隐藏

多态与转型

在子类中使用啥关键字做前缀可调用被子类覆盖的父类中的方法