【问题标题】:Python Parent Class Instance VariablesPython 父类实例变量
【发布时间】:2014-03-19 02:43:11
【问题描述】:

我有一个名为 parent 的父类,它是这样的:

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)

【问题讨论】:

  • 当班级不是Event时,你为什么要打电话给super(Event, self)Event 甚至没有出现在继承层次结构中。

标签: python


【解决方案1】:

需要将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

【讨论】:

  • 如果是这样,我还需要self.p1 = p1self.p2 = p2 行,还是根据您的回答,它会自动填写这些值?
  • @user1234440 不,你不需要self.p1 = p1self.p2 = p2
猜你喜欢
  • 2019-02-01
  • 2011-02-21
  • 1970-01-01
  • 2019-05-07
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多