37,718
社区成员
发帖
与我相关
我的任务
分享
#!/usr/bin/python
# -*- coding: utf-8 -*-
class A(object):
def __init__(self):
print 'A __init__'
pass
class C(object):
def __init__(self):
print 'C __init__'
pass
class B(A,C):
def __init__(self):
print 'B __init__'
super(B, self).__init__()
print 'leave B'
class D(B):
def __init__(self):
print 'D __init__'
super(D, self).__init__()
print 'leave D'
if __name__ == '__main__':
D()
class A(object):
def __init__(self):
print 'A __init__'
super(A, self).__init__()
print 'leave A'
class C(object):
def __init__(self):
print 'C __init__'
super(C, self).__init__()
print 'leave C'
class B(A,C):
def __init__(self):
print 'B __init__'
super(B, self).__init__()
print 'leave B'
class D(B):
def __init__(self):
print 'D __init__'
super(D, self).__init__()
print 'leave D'
if __name__ == '__main__':
D()
class A(object):
def __init__(self):
print 'A __init__'
pass
def test(self):
print 'A.test()'
class C(object):
def __init__(self):
print 'C __init__'
pass
def test(self):
print 'C.test'
class B(A,C):
def __init__(self):
print 'B __init__'
super(B, self).__init__()
print 'leave B'
def test(self):
print 'B.test()'
class D(B):
def __init__(self):
print 'D __init__'
super(D, self).__init__()
print 'leave D'
if __name__ == '__main__':
d = D()
print
d.test()
1.直接运行,打印B.test()
2.注释掉B类的test方法,打印A.test()
3.继续注释掉A类的test方法,打印C.test()
可见D的super()方法的基类搜索顺序是B,A,C,调用test()方法时,是deep first搜索,直到找到包含test()的基类为止