TypeError: Super no toma argumentos de palabras clave?

Primero, aquí está mi código:

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

Cuando compilo esto me sale este error:

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

Intenté buscar cualquier tipo de ayuda, pero no pude encontrar nada. También tengo algunos Kwargs en las categorías de otras clases, pero estos son los que plantean cualquier tipo de problemas (a partir de ahora). Entonces, ¿qué podría estar causando esto? También he visto a alguien decir que poner un super en la clase base lo solucionará, pero no funcionó (pasé los mismos argumentos que están en __init__ la clase Base).

Los argumentos del método __init__ los padres deben pasarse al método __init__ :

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

Todo lo que se pasa a super() es la clase secundaria ( Kidnappers en este caso) y una referencia a la instancia actual ( self ).


Sin embargo, tenga en cuenta que si está utilizando Python 3.x, todo lo que necesita hacer es:

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

y Python resolverá el rest.


Aquí hay algunos enlaces a donde se explica esto en la documentación:

  • Python 2.x super()
  • Python 3.x super()

Opción # 1: Python 2.7x

Aquí puede pasar el self teclado a super (), que hace referencia inherentemente a las propiedades de la instancia.

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

Opción # 2: Python 3x

super() ya no necesita ningún parámetro y simplemente puede escribir

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