从父类获取变量以用于子类的方法

时间:2015-09-03 09:13:55

标签: python inheritance

我试图了解Python中的父类和子类如何工作,我遇到了这个看似简单的问题:

class parent(object):

    def __init__(self):
        self.data = 42


class child(parent):

    def __init__(self):
        self.string = 'is the answer!'

    def printDataAndString(self):
        print( str(self.data) + ' ' + self.string )


c = child()
c.printDataAndString()

我期待字符串 42就是答案!但我得到了

  

属性错误:'孩子'对象没有属性'数据'

我缺少什么?

我尝试了passsuper(parent,...),但无法做到正确。

1 个答案:

答案 0 :(得分:9)

由于您的child有自己的__init__()函数,因此您需要调用父类“__init__(),否则不会调用它。示例 -

def __init__(self):
    super(child,self).__init__()
    self.string = 'is the answer!'

super() from documentation -

  

超级(类型[,对象或类型])

     

返回一个代理对象,该方法将方法调用委托给父类或兄弟类类型。这对于访问已在类中重写的继承方法很有用。搜索顺序与getattr()使用的搜索顺序相同,只是跳过了类型本身。

因此super()的第一个参数应该是子类(要调用其“父类”方法),第二个参数应该是对象本身,即self。因此,super(child, self)

Python 3.x中,您只需致电 -

即可
super().__init__()

它将从正确的父类调用__init__()方法。