簡體   English   中英

python 3類繼承問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM