2010-09-06 55 views
4

比方說,我有以下兩類:如何在Python中調用特定的基類方法?

class A(object): 
    def __init__(self, i): 
     self.i = i 
class B(object): 
    def __init__(self, j): 
     self.j = j 

class C(A, B): 
    def __init__(self): 
     super(C, self).__init__(self, 4) 
c = C() 

Ç只會有我的屬性設置,而不是第j。 我應該寫什麼來設置屬性/只有j屬性?

+0

即時猜測B將不得不從繼承和調用super藏漢 – Robus 2010-09-06 13:43:30

回答

5

如果要設置止j屬性,那麼只能調用B.__init__

class C(A, B): 
    def __init__(self): 
     B.__init__(self,4) 

如果你想手動調用都AB__init__方法,那麼你當然可以這樣做的 :

class C(A, B): 
    def __init__(self): 
     A.__init__(self,4) 
     B.__init__(self,4) 

使用supera bit tricky(尤其是看到標題爲 「參數傳遞,哎呀!」)。如果你仍然想使用super,這裏是你可以做的一種方式:

class D(object): 
    def __init__(self, i): 
     pass 
class A(D): 
    def __init__(self, i): 
     super(A,self).__init__(i) 
     self.i = i 
class B(D): 
    def __init__(self, j): 
     super(B,self).__init__(j)   
     self.j = j 

class C(A, B): 
    def __init__(self): 
     super(C, self).__init__(4) 
c = C() 
print(c.i,c.j) 
# (4, 4)