Python中的super()函数的用法

版权声明:来源请注明出处 https://blog.csdn.net/qq_40196164/article/details/82912808

描述:

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

猜你喜欢

转载自blog.csdn.net/qq_40196164/article/details/82912808