2014-03-19 92 views
0

我有一個父類名爲parent其是這樣的:Python的父類的實例變量

class parent(object): 

    def __init__(self,p1,p2): 
     super(parent,self).__init__() 
     self.p1= p1 
     self.p2= p2 

我還有一個子類,看起來像如下:

class child(parent): 

    def __init__(self,p1,p2,p3): 
     super(child,self).__init__() 
     self.p1 = p1 
     self.p2 = p2 
     self.p3 = p3 

這個子類有一個額外的實例變量,稱爲p3。我想要做的就是有能力用參數創建對象。這些參數用於更新類parent的繼承變量p1 & p2及其自己的實例變量p3。但是,當我運行上面,我得到錯誤:

if __name__ == "__main__": 
    p1 = parent('p1_parent','p2_parent') 


    p2 = child('p1_child','p1_child','p1_child') 

錯誤:

TypeError: __init__() takes exactly 3 arguments (1 given) 
+0

當班級不是「Event」時,爲什麼要調用'super(Event,self)'?事件甚至不會出現在繼承層次中。 – user2357112

回答

3

您需要通過p1p2父類的構造函數:

super(child, self).__init__(p1, p2) 

例子:

class parent(object): 
    def __init__(self,p1,p2): 
     super(parent, self).__init__() 
     self.p1= p1 
     self.p2= p2 

class child(parent): 
    def __init__(self,p1,p2,p3): 
     super(child,self).__init__(p1, p2) 
     self.p3 = p3 


child1 = child(1,2,3) 
print child1.p1, child1.p2, child1.p3 

打印:1 2 3

+0

如果是這樣,我仍然需要'self.p1 = p1'和'self.p2 = p2'這兩行或者用你的答案,它會自動填入那些值? – user1234440

+0

@ user1234440 nope,你不需要'self.p1 = p1'和'self.p2 = p2'。 – alecxe