python类-super

本文详细介绍了Python中super()函数的定义、用途及使用方法,包括单继承与多继承场景下的应用,并通过代码示例展示其在类继承结构中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

super的定义为:

super([type[,object-or-type]])具体说明可以参见python文档,主要用途有两种情况

1)单继承时用来引用父类各种方便

2)多继承时可以区分具体调用哪个父类的方法


代码示例:

单继承

class A(object): 
    def __init__(self):
        self.x = 1
        self.y = 3


    def testA(self):
        print(self.x)


class B(A):
    def __init__(self):
        #这个不需要参数直接调用super函数
        #因为不需要写父类的名字,维护起来很方便,即使父类名字变更代码变更小
        super().__init__()
        self.x = 2
        
    def testB(self):
        print(self.x)


    def testB2(self):
        print(self.y)
        
if __name__ == '__main__':
    b = B()
    b.testB()
    b.testA()
    b.testB2()

多继承

对于super(B, self).__init__()是这样理解的:super(B, self)首先找到B的父类,然后把类B的对象self转换为类A的对象,然后“被转换”的类A对象调用自己的__init__函数。

      A.print
    /   \    
   B    C
    \   /  
      D
类似菱形继承的情况,如果不使用super的情况,则在D中会出现调用两次A.print的情况

例1
class A(object): 
    def __init__(self):
        print('testA')

class B(A):
    def __init__(self):
        A.__init__(self)
        print('testB')

class C(A):
    def __init__(self):
        A.__init__(self)
        print('testC')

class D(B,C):
    def __init__(self):
        B.__init__(self)
        C.__init__(self)
        print('TestD')
        
if __name__ == '__main__':
    d = D()
输出:
testA
testB
testA
testC
TestD

例二
class A(object): 
    def __init__(self):
        print('testA')


class B(A):
    def __init__(self):
        #为什么不用参数,因为super会自动找到父类,
        #并把super参数的self转换成父类的对象,然后再调用__init__
        #也就是说这个是通过instance调用的,已经不需要再制定instance
        #而类定义时候的self,是为instance预留的位置,所以需要
        super(B,self).__init__() 
        print('testB')

class C(A):
    def __init__(self):
        super(C,self).__init__()
        print('testC')


class D(B,C):
    def __init__(self):
        super(D,self).__init__()
        print('TestD')
        
if __name__ == '__main__':
    d = D()
输出:
testA
testC
testB
TestD

可以看到,这里只是调用了一次Super但是他会把继承的B和C的__init__都会执行一次。

<本节完>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值