0
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得到一個。因此print(obj.a)在搜索類C時會打印出4。但是答案是2.這意味着Python從類B獲得self.a = 2而不是self.a = 4從類C.任何人都可以解釋原因是什麼?謝謝蟒蛇3類繼承問題
您明確*在'C .__ init__'後面調用'B .__ init__'。您應該使用'super'來管理多重繼承,並閱讀MRO(方法解析順序)以查看調用超級方法實現的順序。 – jonrsharpe
您手動調用父'__init__'方法;由於'B .__ init __()'最後被調用,因此最後執行'self.a = 2'(在調用'A .__ init __()'之後)。 –