2014-03-19 93 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