0

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

4

1 回答 1

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
于 2013-05-13T17:57:23.180 回答