2014-02-11 57 views
1

我想写一个动物园PROGRAMM但我永诺得到下面的输出类型错误:失踪1个人需要位置参数:“自我”,但类实例化

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() 

有没有人有一个想法,为什么我得到这个错误。

回答

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中的默认设置。

+0

谢谢我知道这是一个愚蠢的事情没有想到它是愚蠢的虽然 – Sulumar

相关问题