版权声明:来源请注明出处 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