先来看一段代码:
class First(object):
def __init__(self):
print ("first")
class Second(object):
def __init__(self):
print ("second")
class Third(object):
def __init__(self):
print ("third")
class Forth(object):
def __init__(self):
print ("forth")
class Five(First, Second, Third, Forth):
def __init__(self):
print ("that's it")
a = Five()
这段代码的输出结果是:
that's it
也就是说,在class Five
中的def__init__(self)
override了父类(classes: First, Second, Third, Forth)的def__init__(self)
。
class First(object):
def __init__(self):
print ("first")
class Second(object):
def __init__(self):
print ("second")
class Third(object):
def __init__(self):
print ("third")
class Forth(object):
def __init__(self):
print ("forth")
class Five(First, Second, Third, Forth):
def __init__(self):
super().__init()__
print ("that's it")
a = Five()
输出结果是:
first
that's it
也就是说,class Five
先继承了父类 First 的def __init__(self)
,然后执行自己重新定义的def __init__(self)
。
如果在所有父类中也使用super().__init__
,事情变得有趣:
class First(object):
def __init__(self):
super().__init__()
print ("first")
class Second(object):
def __init__(self):
super().__init__()
print ("second")
class Third(object):
def __init__(self):
super().__init__()
print ("third")
class Forth(object):
def __init__(self):
super().__init__()
print ("forth")
class Five(First, Second, Third, Forth):
def __init__(self):
super().__init__()
print ("that's it")
a = Five()
这段代码的输出结果是:
forth
third
second
first
that's it
也就是说,如果在父类中都加入super()
,class Five
执行父类中def __init__()
的顺序是class Forth
-> class Third
-> class Second
-> class First
。
也就是说,class Five
在继承了class First
后,不会马上停止并执行class FIrst
中的def __init__()
,而是继续往下搜寻,直到最后。