[英]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.