关于python:类继承错误:子对象没有属性’a’

Class Inheritance Error: Child object has no attribute 'a'

请考虑以下代码段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

但错误消息指出'child'对象没有属性'a'。

如果我改为使用parent init方法而不是super方法,那么我得到了我想要的输出。

1
parent.__init__(self)

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


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

应该在'child'对象上调用super()。

1
super(child, self).__init__()

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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())

输出:

1
2
3
9
0
0 9