|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 annywang 于 2017-12-31 20:00 编辑
先来不用supper()获得父类继承关系的版本,这个版本是对的!
class A(object):
def __init__(self):
print ("enter A")
print ("leave A")
class B(object):
def __init__(self):
print ("enter B")
print ("leave B")
class C(A):
def __init__(self):
print ("enter C")
A.__init__(self)
print ("leave C")
class D(A):
def __init__(self):
print ("enter D")
A.__init__(self)
print ("leave D")
class E(B, C):
def __init__(self):
print ("enter E")
B.__init__(self)
C.__init__(self)
print ("leave E")
class F(E, D):
def __init__(self):
print ("enter F")
E.__init__(self)
D.__init__(self)
print ("leave F")
f = F()
enter F
enter E
enter B
leave B
enter C
enter A
leave A
leave C
leave E
enter D
enter A
leave A
leave D
leave F
好了,再来用supper获得父类继承关系的版本,诡异的事发生了:
class A(object):
def __init__(self):
print ("enter A")
print ("leave A")
class B(object):
def __init__(self):
print ("enter B")
print ("leave B")
class C(A):
def __init__(self):
print ("enter C")
super(C,self).__init__()
print ("leave C")
class D(A):
def __init__(self):
print ("enter D")
super(D,self).__init__()
print ("leave D")
class E(B, C):
def __init__(self):
print ("enter E")
B.__init__(self)
C.__init__(self)
print ("leave E")
class F(E, D):
def __init__(self):
print ("enter F")
E.__init__(self)
D.__init__(self)
print ("leave F")
f = F()
enter F
enter E
enter B
leave B
enter C
enter D
enter A
leave A
leave D
leave C
leave E
enter D
enter A
leave A
leave D
leave F
C和D都是继承A,但它俩没什么关系,为什么进入C以后直接进入D了?????
单独调用c=C(),是没有进入D的
enter C
enter A
leave A
leave C
单独调用e=E(),是没有进入D的
enter E
enter B
leave B
enter C
enter A
leave A
leave C
leave E
很困惑呀,等大神来~ |
|