经典类
class A():
ret = 1
def __init__(self):
pass
class B(A):
def __init__(self):
pass
class C(A):
ret = 2
def __init__(self):
pass
class D(B, C):
def __init__(self):
pass #B->A->C x = D()print x.ret输出为:1
新式类
class A(object):
ret = 1
def __init__(self):
pass
class B(A):
def __init__(self):
pass
class C(A):
ret = 2
def __init__(self):
pass
class D(B, C):
def __init__(self):
pass #B->C->A x = D()print x.ret输出为:2
super()
class A(object):
def __init__(self):
print "A"
class B(object):
def __init__(self):
print "B"
class C(object):
def __init__(self):
print "C"
class D(A,B,C):
def __init__(self):
super(D,self).__init__()
super(A,self).__init__()
super(B,self).__init__()
super(C,self).__init__()
X = D()
会发现:
super(D,self).init()
执行的是A.init()
super(A,self).init()
执行的是B.init()
super(B,self).init()
执行的是C.init()
super(C,self).init()执行的是Object.init()
这是因为mro(D)为:[ D, A, B, C, Object]
Python 2.x中默认都是经典类,只有显式继承了object才是新式类, 使用了深度优先的方法
Python 3.x中默认都是新式类,不必显式的继承object, 使用的是广度优先的方法
网友评论