我试图了解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就是答案!但我得到了
属性错误:'孩子'对象没有属性'数据'
我缺少什么?
我尝试了pass
和super(parent,...)
,但无法做到正确。
答案 0 :(得分:9)
由于您的child
有自己的__init__()
函数,因此您需要调用父类“__init__()
,否则不会调用它。示例 -
def __init__(self):
super(child,self).__init__()
self.string = 'is the answer!'
超级(类型[,对象或类型])
返回一个代理对象,该方法将方法调用委托给父类或兄弟类类型。这对于访问已在类中重写的继承方法很有用。搜索顺序与getattr()使用的搜索顺序相同,只是跳过了类型本身。
因此super()
的第一个参数应该是子类(要调用其“父类”方法),第二个参数应该是对象本身,即self。因此,super(child, self)
。
在Python 3.x中,您只需致电 -
即可super().__init__()
它将从正确的父类调用__init__()
方法。