超级引发错误“必须是类型而不是跳线”python

时间:2015-04-18 10:06:01

标签: python oop inheritance

我从我认为的新风格类开始:

class Object(object):
    def __init__(self,size):
        self.size=size

然后我创建了一个子类,看起来也是新的样式:

class Alien(Object):
    def __init__(self,damage,*arg,**kwargs):
        self.damage=damage
        super(self,Alien).__init__(*arg,**kwargs)
        self.damage=damage

最后,我创建了一个最后的子类:

class Jumper(Alien):
    def __init__(self,bounceSize,*arg,**kwargs):
        self.bounceSize=bounceSize
        super(self,Jumper).__init__(*arg,**kwargs)

从我对继承的基本理解来看,类Jumper应该继承Object类型和Alien类型的所有参数,而是在创建对象时:

myObj=Jumper(size=10,damage=10,bounceSize=50)

我遇到了错误:

Traceback (most recent call last):
  File "C:/Python27/test2", line 15, in <module>
    myObj=Jumper(size=10,damage=25,bounceSize=50)
  File "C:/Python27/test2", line 13, in __init__
    super(self,Jumper).__init__(*arg,**kwargs)
TypeError: must be type, not Jumper

使用&#34; type()&#34;检查每个班级时功能我发现它们都是#34;类型&#34 ;;我认为它们表明它们属于新的类型;这似乎是其他人的问题。

那是什么导致我的问题?

1 个答案:

答案 0 :(得分:1)

你的自我和班级的顺序错误:

class Object(object):
    def __init__(self,size):
        self.size=size


class Alien(Object):
    def __init__(self, damage, size, *arg, **kwargs):
        super(Alien, self).__init__(size)
        self.damage = damage

class Jumper(Alien):
    def __init__(self, bounceSize, damage, *arg, **kwargs):
        super(Jumper, self).__init__(damage, *arg, **kwargs)
        self.bounceSize = bounceSize