这段代码中的继承有什么问题?

时间:2016-07-25 12:20:24

标签: python

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中的继承概念来计算它们的和和乘法。 我不知道是什么问题。这段代码有什么问题? 谢谢,

3 个答案:

答案 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)