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。所以print(obj.a)将在搜索C类时打印出4但答案是2.这意味着Python从B类获得self.a = 2而不是来自C类的self.a = 4.任何人都可以解释原因是什么?谢谢
答案 0 :(得分:1)
这里没有搜索。您正在对未绑定的方法进行显式的直接调用,手动传入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
。