2016-08-05 48 views
0

下面是我的代碼:如何在python中使用子類的方法調用第二個父類的方法?

class Parent1(object): 
    def __init__(self): 
     print "!!! ___initialization Parent1___ !!!" 

    def method(self): 
     print "*** method of Parent1 is called ***" 


class Parent2(object): 
    def __init__(self): 
     print "!!! ___initialization Parent2___ !!!" 

    def method(self): 
     print "*** method of Parent2 is called ***" 

class Child(Parent1,Parent2): 
    def __init__(self): 
     print "!!! ___initialization Child___ !!!" 

    def method(self): 
     super(Child,self).method() 
     print "*** method of Child is called ***" 


Ch = Child() 
Ch.method() 

我想打電話給使用子類的對象Parent2method()。條件僅應建立子類對象,並在子類中聲明沒有變化

回答

1
Parent2.method(self) 

這就是你所需要的(class Child(Parent1,Parent2):不應該改變。) - 的instance.method()ClassName.method(instance)只是語法糖,因此,所有你需要做的是沒有語法糖,它會做的很好。

我改變了Child類這樣的:

class Child(Parent1,Parent2): 
    def __init__(self): 
     print "!!! ___initialization Child___ !!!" 

    def method(self): 
     super(Child,self).method() 
     print "*** method of Child is called ***" 
     Parent2.method(self) 

和:

# Out: 
$ python c.py 
!!! ___initialization Child___ !!! 
*** method of Parent1 is called *** 
*** method of Child is called *** 
*** method of Parent2 is called *** 

你得到預期的輸出完美的罰款。

+1

你也可以將'super(Child,self).method()'改爲'Parent1.method(self)'。這個類層次結構不是爲了正確使用'super'而設計的。 – chepner

+0

@詹姆斯:感謝您的解決方案。這是唯一的方法嗎?有沒有其他方法?不能用super()或decorator來完成嗎? –

+0

@Praveenkumar我並不知道其中之一,但我絕不是Python繼承方面的專家,可能有一些我不知道的方法。 – James