class a(object):
def __init__(self):
self.num1=0
self.num2=0
def set1(self,score1,score2):
self.num1=score1
self.num2=score2
def show1(self):
print("num1",self.num1,"num2",self.num2)
class b(a):
def __init__(self):
super().__init__()
def set2(self):
self.sum=self.num1+self.num2
def show2(self):
print("d=",self.sum)
class c(b):
def __init__(self):
super.__init__()
def set3(self):
self.multiplication=self.num1*self.num2
def show3(self):
print("f=",self.multiplication)
objects=c()
objects.set1(1000,100)
objects.show1()
objects.set2()
objects.show2()
objects.set3()
objects.show3()
我编写了这段代码来处理继承的含义,但我收到了:
objects=c()
File "C:\Users\user\Desktop\New folder\2.py", line 23, in __init__
super.__init__()
TypeError: descriptor '__init__' of 'super' object needs an argument
num1和num2是两个数字,我想通过Python中的继承概念来计算它们的和和乘法。 我不知道是什么问题。这段代码有什么问题? 谢谢,
答案 0 :(得分:0)
您在课程super.__init__()
的{{1}}中写了super().__init__()
而不是__init__
。
如果您使用的是Python 2,则需要通过以下方式致电c
:
super
。
答案 1 :(得分:0)
你需要打电话给super,现在它只是一个参考。
class c(b):
super().__init__()
另一件事是,如果你想让这个继承更加健壮,你可以将所有的args和kwargs传递给__init__
,如下所示:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
这将使您的课程更加灵活,并且可以开放多重继承。
答案 2 :(得分:0)
我认为您使用super()
内置Here the doc
在你的情况下,超级需要两个参数:类和类的实例。
在你的b.__init__
中,synthax将是:
super(b,self).__init__()
这里是你的问题的解决方案:
class b(a):
def __init__(self):
super(b, self).__init__()
def set2(self):
self.sum=self.num1+self.num2
def show2(self):
print("d=",self.sum)
class c(b):
def __init__(self):
super(c, self).__init__()
def set3(self):
self.multiplication=self.num1*self.num2
def show3(self):
print("f=",self.multiplication)