TypeError:缺少1个必需的位置参数:'self'但是实例化了类

时间:2014-02-11 20:27:08

标签: python typeerror

我正在尝试编写一个Zoo程序,但我总是得到以下输出

Traceback (most recent call last):
  File "C:\Dokumente und Einstellungen\cisco_2\zoo.py", line 31, in <module>
    ape.vorstellen()
  File "C:\Dokumente und Einstellungen\cisco_2\zoo.py", line 26, in vorstellen
    Tier.vorstellen()
TypeError: vorstellen() missing 1 required positional argument: 'self'

这是源代码:

class Zoo:

    def __init__(self,name,rasse):
        self.name = name
        self.rasse = rasse

    def vorstellen (self):
        print ("Hallo, Ich heisse {0} und bin ein {1}".format(self.name,self.rasse))

class Tier (Zoo):

    def __init__(self,name,rasse,kafig):
        Zoo.__init__(self,name, rasse)
        self.kafig = kafig
    def vorstellen (self):
        Zoo.vorstellen()
        print ("Ich wohne in Kaefig {0}".format(self.kafig))

class Affe (Tier):

    def __init__(self,name,rasse,kafig,futter):
        Tier.__init__(self,name,rasse,kafig)
        self.futter = futter

    def vorstellen(self):
        Tier.vorstellen()
        print ("Ich fresse {0}".format(self.futter))

ape = Affe("Chimp","Affe",3,"Bananen")

ape.vorstellen()

有没有人知道我为什么会收到这个错误。

1 个答案:

答案 0 :(得分:2)

您正在类上调用未绑定的方法:

def vorstellen(self):
    Tier.vorstellen()
    print ("Ich fresse {0}".format(self.futter))

self添加:

def vorstellen(self):
    Tier.vorstellen(self)
    print ("Ich fresse {0}".format(self.futter))

或使用super()加载层次结构中的下一个方法; super()为您绑定方法:

def vorstellen(self):
    super().vorstellen()
    print ("Ich fresse {0}".format(self.futter))

这假设您使用的是Python 3;在Python 2中,Zoo必须从object继承,您必须将当前类(按名称)和self传递给super()

def vorstellen(self):
    super(Affe, self).vorstellen()
    print ("Ich fresse {0}".format(self.futter))

继承object使Zoo类和所有子类成为新式类。这是Python 3中的默认设置。