2015-06-04 10 views
10

Als erstes ist hier mein Code:TypeError: Super nimmt keine Schlüsselwortargumente?

class Enemy(): 
    def __init__(self, name, hp, damage): 
     self.name = name 
     self.hp = hp 
     self.damage = damage 


    def is_alive(self): 
     """Checks if alive""" 
     return self.hp > 0 

class WildBoar(Enemy): 
    def __init__(self): 
     super(WildBoar, name="Wild Boar", hp=10, damage=2).__init__() 

class Marauder(Enemy): 
    def __init__(self): 
     super(Marauder, name="Marauder", hp=20, damage=5).__init__() 


class Kidnappers(Enemy): 
    def __init__(self): 
     super(Kidnappers, name="The Kidnappers", hp=30, damage=7).__init__() 

Als ich das kompilieren bekomme ich diesen Fehler:

super(WildBoar, name="Wild Boar", hp=10, damage=2).__init__() 
TypeError: super does not take keyword arguments 

Ich habe versucht, sich nach jeder Art von Hilfe, aber ich konnte nichts finden. Ich habe auch einige Kwargs in anderen Super-Klassen anderer Klassen, aber diese sind diejenigen, die irgendwelche Probleme aufwerfen (wie jetzt). Was könnte das verursachen? Ich habe auch gesehen, dass jemand sagt, dass das Setzen eines super in der Basisklasse es beheben wird, aber es hat nicht funktioniert (ich übergab die gleichen Argumente, die in der Base-Klasse sind __init__).

Antwort

12

Die Argumente für die __init__ Methode der Eltern sollte auf die __init__ Methode übergeben werden:

super(Kidnappers, self).__init__(name="The Kidnappers", hp=30, damage=7) 
# or 
super(Kidnappers, self).__init__("The Kidnappers", 30, 7) 

Alles, was Sie super() passieren ist das Kind Klasse (Kidnappers in diesem Fall) und einen Verweis auf die aktuelle Instanz (self).


ist jedoch zu beachten, dass, wenn Sie Python 3.x verwenden, alles, was Sie tun müssen, ist:

super().__init__("The Kidnappers", 30, 7) 

und Python wird den Rest trainieren.


Hier sind einige Links, mit denen diese in der Dokumentation erklärt:

+0

OK schreiben, werde ich durch alle meine Code gehen und repariere alles, danke! – Scoutdrago3

-2

Option # 1: Python 2.7x

Hier kannst du ca n übergeben Sie self keywork zu Super(), die inhärent die Instanzeigenschaften verweist.

super(self, name="Wild Boar", hp=10, damage=2).__init__() 

Option # 2: Python 3x

super() müssen nicht mehr alle Parameter und Sie können einfach

super().__init__("The Kidnappers", 30, 7) 
+0

Option # 1 übergibt immer noch '__init__'s Argumente an' super', was genauso scheitert wie Scoutdrago3. –

Verwandte Themen