AttributeError:'child'对象没有属性'_name'

时间:2013-05-13 17:54:48

标签: python inheritance python-2.7 python-3.x

我是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中的类继承吗?

1 个答案:

答案 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