Python中的super()函数的用法

本文详细介绍了Python中super()函数的用途、语法及参数,并通过实例展示了如何使用super()解决多重继承问题,包括方法解析顺序(MRO)和钻石继承等复杂情况。

描述:

super()函数是用于调用下一个父类(超类、基类)并返回该父类实例的一个方法。

super()函数是用来解决多重继承问题的,直接用类名调用父类方法使用单继承的时候没有问题,但是如果使用多重继承时会涉及查找顺序(method resolution order MRO)、重复调用(钻石继承)等问题。

MRO就是了ide方法解析顺序,其实就是继承父类方法时的顺序表。

语法:

super(type[, object-or-self])

 参数:

  • type —— ——类
  • object-or-type —— —— 类,一般是self

实例:

 1.使用super()来调用父类(单个父类),可以继承父类的方法也可以有自己新的方法

class A(object):
    def __init__(self):
        print("enter A")
        print("leave A")
class B(A):
    def __init__(self):
        print("enter B")
        super(B, self).__init__()
        print("leave B")
>>>b = B()
enter B
enter A
leave A
leave B

2.使用super()来进行多重调用,也就是调用多个父类

class A(object):
    def __init__(self):
        print("enter A")
        print("leave A")
class B(A):
    def __init__(self):
        print("enter B")
        super(B,self).__init__()
        print("leave B")
class C(A):
    def __init__(self):
    print("enter C")
    super(C,self).__init__()
    print("leave C")
class D(B,C):
    def __init__(self):
    print("enter D")
    super(D,self).__init__()
    print("leave D")
>>> d = D()
enter D
enter B
enter C
enter A
leave A
leave C
leave B
leave D

3.这是一种通过父类调用的方法很常用,比较直观,但效果还是和super有差异的。来看下面的例子

class B(A):
    def __init__(self):
        print "enter B"    	
        A.__init__(self)
    	print "leave B" 
class C(A):
    def __init__(self):
        print "enter C"
    	A.__init__(self)
    	print "leave C" 
class D(B,C):
    def __init__(self):
        print "enter D"
    	B.__init__(self)
    	C.__init__(self)
    	print "leave D"
>>> d=D()enter D
enter B
enter A
leave A
leave B
enter C
enter A
leave A
leave C
leave D

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值