python 3类继承问题

时间:2017-09-05 20:35:12

标签: python python-3.x class inheritance

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.任何人都可以解释原因是什么?谢谢

1 个答案:

答案 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