python super函数深度理解(附调用父类函数的两种方法)

应用场景:
当子类函数重写覆盖父类的init(self)方法时,仍需调用父类init(self)中的方法时可使用以下两种方式:
1、调用未绑定的父类方法

def __init__(self):
 #调用父类方法,方法一调用时要明确父类名称
  Fish.__init__(self)
 #使用自身方法
  self.hungry=true

2、使用super函数
super() 函数是用于调用父类(超类)的一个方法。

def __init__(self):
 #调用父类方法,方法二调用时不用明确父类名称,它会自动帮你找出所有基类以及对应的方法
  super().__init__()
 #使用自身方法
  self.hungry=true

super()函数实例 深度理解:

class A():
    def __init__(self):
        print("进入A...")
        print("离开A...")

class B(A):
    def __init__(self):
        print("进入B...")
        A.__init__(self)
        print("离开B...")

class C(A):
    def __init__(self):
        print("进入C...")
        A.__init__(self)
        print("离开C...")

class D(B, C):
    def __init__(self):
        print("进入D...")
        B.__init__(self)
        C.__init__(self)
        print("离开D...")

d = D()

运行结果:出现了多重继承导致重复调用问题,实例化D类A被前后进入了两次。

进入D...
进入B...
进入A...
离开A...
离开B...
进入C...
进入A...
离开A...
离开C...
离开D...

使用super()函数改进:

class A():
    def __init__(self):
        print("进入A...")
        print("离开A...")

class B(A):
    def __init__(self):
        print("进入B...")
        super().__init__()
        print("离开B...")

class C(A):
    def __init__(self):
        print("进入C...")
        super().__init__()
        print("离开C...")

class D(B, C):
    def __init__(self):
        print("进入D...")
        super().__init__()
        print("离开D...")

d = D()

结果:

进入D...
进入B...
进入C...
进入A...
离开A...
离开C...
离开B...
离开D...

说明:本文实例参考小甲鱼python教程

码子不易,解决问题的话帮忙点个赞哦

你可能感兴趣的:(python super函数深度理解(附调用父类函数的两种方法))