2014-02-11 6 views
1

Я пытаюсь написать программка Zoo, но я ВСЕГДА получаю следующий выводTypeError: отсутствует 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

Смежные вопросы