类继承错误:子对象没有属性“ a”

时间:2018-08-05 15:33:00

标签: python class oop inheritance

请考虑以下代码段

class parent(object):
    def __init__(self):
        self.a = 0

class child(parent):
    def __init__(self):
        super(parent, self).__init__()
        self.b = 9
    def func(self):
        print(self.a, self.b)

c = child()
print(c.b)
print(c.a)

我期望的输出是:

9 0

但是错误消息指出“子”对象没有属性“ a”。

如果我改用parents init方法而不是super,则会得到所需的输出。

parent.__init__(self)

我从其他帖子中读过,推荐使用super来实现继承。我的问题是如何使用超级方法将由init方法初始化的父类属性继承到子类中?

2 个答案:

答案 0 :(得分:1)

在python 3中,大大简化了init方法中对super()的调用:

class parent(object):
    def __init__(self):
        self.a = 0

class child(parent):
    def __init__(self):
        super().__init__()
        self.b = 9
    def func(self):
        print(self.a, self.b)

c = child()
print(c.b)
print(c.a)
print(c.func())

输出:

9
0
0 9

答案 1 :(得分:1)

正如@eyllanesc在评论中提到的那样,这是一个错字。

super()应该在“子”对象上被调用。

super(child, self).__init__()