我正在尝试编写一个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()
有没有人知道我为什么会收到这个错误。
答案 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中的默认设置。