[英]python 3 class inheritance issue
class A(object):
def __init__(self):
self.a = 1
class B(A):
def __init__(self):
A.__init__(self)
self.a = 2
self.b = 3
class C(object):
def __init__(self):
self.a = 4
self.c = 5
class D(C, B):
def __init__(self):
C.__init__(self)
B.__init__(self)
self.d = 6
obj = D()
print(obj.a)
我的理解是,python首先会搜索类C,然后是B,然后是A,以获得a。 因此,在搜索C类时,print(obj.a)将输出4。但是答案是2。这意味着Python从B类获得了self.a = 2,而不是从C类获得了self.a = 4。原因是什么? 谢谢
这里没有搜索。 您正在对未绑定方法进行显式,直接的调用,并手动传递了self
。 这些是简单的函数调用 ,仅此而已。
因此,这只是跟踪执行顺序的一个问题:
D() -> D.__init__(self)
C.__init__(self)
self.a = 4
B.__init__(self)
A.__init__(self)
self.a = 1
self.a = 2
所以a
分配了4
,然后是1
,然后是2
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.