我是Python的初学者并试图理解类继承。但是,当我尝试以下代码时,我收到此错误:
AttributeError: 'child' object has no attribute '_name'
这是代码:
class parent:
def __init__(self):
self._name = "Smith"
@property
def name(self):
return self._name
class child(parent):
def __init__(self, childname):
self._childname = childname
def getname(self):
return "child : {} .. parent : {}".format(self._childname, super().name)
def main():
Dad = parent()
Son = child("jack")
print(Son.getname())
if __name__ == "__main__":
main()
为什么?我正确理解Python中的类继承吗?
答案 0 :(得分:6)
你的问题实际发生在这里:
def getname(self):
return "child : {} .. parent : {}".format(self._childname, super().name)
更确切地说,super().name
是罪魁祸首:不仅super()
没用,而且你应该调用name()
而不是name
,但如果你看一下代码name()
,您会注意到它使用变量_name
。
但是,_name
在父__init__
方法中初始化。如果你想要它被调用,你应该总是在孩子的方法中调用父__init__
方法,它不是自动完成的。您的孩子__init__
方法应为:
class child(parent):
def __init__(self, childname):
super().__init__()
self._childname = childname