请考虑以下代码段
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方法初始化的父类属性继承到子类中?
答案 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__()