super未继承,是为啥呢?
class Fridge2():def __init__(self):
print('这是一类冰箱')
def pack1(self,goods):
self.goods=goods
print('在冰箱中装入%s'%self.goods)
class Doublefridge():
def __init__(self):
super().__init__(self.pack)
print('这是一类双开门冰箱')
fridge=Doublefridge()
fridge.pack('大象')
这是一段复写书上的代码,按书上的显示应该会print
这是一类冰箱
这是一类双开门冰箱
在冰箱中装入大象
但程序却报错:AttributeError: 'Doublefridge' object has no attribute 'pack'
请问为啥呢? 问题出在Doublefridge类的初始化方法中的super()函数调用上。在Python中,super()函数用于调用父类的方法,但是它并不是用于调用父类的构造方法的。在这段代码中,Doublefridge类的初始化方法中调用了super().__init__(self.pack),但是这样的调用是错误的。
在Doublefridge类中,它并没有直接继承Fridge2类,所以它也没有继承Fridge2类的方法和属性。因此,Doublefridge类中没有名为pack的方法,导致了AttributeError: 'Doublefridge' object has no attribute 'pack'的错误。
要解决这个问题,你可以将Doublefridge类直接继承自Fridge2类,这样Doublefridge类就能够继承Fridge2类的方法和属性。修改代码如下:
class Doublefridge(Fridge2):
def __init__(self):
super().__init__()
print('这是一类双开门冰箱')
fridge = Doublefridge()
fridge.pack1('大象')
这样修改后,程序将会输出预期的结果:
这是一类冰箱
这是一类双开门冰箱
在冰箱中装入大象
这个问题的原因在于你的Doublefridge类并没有继承Fridge2类,所以Doublefridge类中并没有pack方法。super()函数是用来调用父类(超类)的一个方法,但是Doublefridge并没有父类,所以这里使用super()会出错。
另外,你在Doublefridge的__init__方法中调用了self.pack,但是Doublefridge类中并没有定义pack方法,所以会报AttributeError: 'Doublefridge' object has no attribute 'pack'这个错误。
如果你想让Doublefridge类有pack方法,并且能够打印出你想要的结果,你应该让Doublefridge类继承Fridge2类,代码应该修改为:
class Fridge2():
def __init__(self):
print('这是一类冰箱')
def pack(self,goods):
self.goods=goods
print('在冰箱中装入%s'%self.goods)
class Doublefridge(Fridge2):
def __init__(self):
super().__init__()
print('这是一类双开门冰箱')
fridge=Doublefridge()
fridge.pack('大象')
这样,当你创建一个Doublefridge对象并调用pack方法时,它会先调用Fridge2类的__init__方法,然后打印出'这是一类冰箱',然后打印出'这是一类双开门冰箱',最后调用Fridge2类的pack方法,打印出'在冰箱中装入大象'。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 super未继承报错的原因
在您提供的代码中,出现了报错 AttributeError: 'Doublefridge' object has no attribute 'pack' 的问题。这是因为 Doublefridge 类没有直接继承 Fridge2 类,所以无法访问 Fridge2 类中定义的方法 pack()。
super() 函数用于在子类中调用父类的方法或构造函数。然而,在 Doublefridge 类的构造函数中使用 super().__init__(self.pack) 是不正确的。如果想要继承 Fridge2 类的属性和方法,需要通过类的继承来实现。
下面是修改后的代码示例:
class Fridge2:
def __init__(self):
print('这是一类冰箱')
def pack1(self, goods):
self.goods = goods
print('在冰箱中装入%s' % self.goods)
class Doublefridge(Fridge2):# 继承Fridge2类
def __init__(self):
super().__init__()# 调用父类的构造函数
print('这是一类双开门冰箱')
fridge = Doublefridge()
fridge.pack1('大象')
修改后的代码中,Doublefridge 类继承了 Fridge2 类,通过 super().__init__() 调用了父类的构造函数,实现了继承效果。运行代码后,输出结果如下:
这是一类冰箱
这是一类双开门冰箱
在冰箱中装入大象
希望以上解释能够解决您的问题。如果还有其他疑问,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]