es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Argumento inesperado en la construcción de una subclase.

Al construir una subclase y usar el constructor de la clase padre, PyCharm señala un error en la línea super().init(), indicando que el último argumento (base_growths) es inesperado. Aquí hay una versión abreviada del código:

class Character:
    def <strong>init</strong>(self, name, base<em>stats, base</em>growths):
        self.name = name
        self.stats = base<em>stats
        self.growths = base</em>growths

class Knight(Character):
    def <strong>init</strong>(self, name, base<em>stats, base</em>growths):
        super().<strong>init</strong>(self, name, base<em>stats, base</em>growths)

lancelot_bases = "placeholder"

lancelot_growths = "placeholder"

lancelot = Knight("Lancelot", lancelot<em>bases, lancelot</em>growths)

Y aquí está el error que obtengo al intentar ejecutarlo:

Traceback (most recent call last):
  File "E:\Projects\tests.py", line 16, in <module>
    lancelot = Knight("Lancelot", lancelot<em>bases, lancelot</em>growths)
  File "E:\Projects\tests.py", line 10, in <strong>init</strong>
    super().<strong>init</strong>(self, name, base<em>stats, base</em>growths)
TypeError: <strong>init</strong>() toma 4 argumentos posicionales pero se dieron 5

No estoy seguro de por qué dice que le estoy dando cinco argumentos. Aunque a través de pruebas, he descubierto que está almacenando la cadena de nombre en la variable base_stats, y la variable de nombre está recibiendo

<main.Knight object at 0x0000029B854FBFA0>
“`

Soy nuevo en la programación, así que no sé lo que significa ni por qué está sucediendo. Por favor, ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema está en la forma en que llama a super() en el constructor de la clase Knight. El primer argumento de super() debe ser la subclase en sí, no una instancia de ella. Por lo tanto, debe cambiar la línea:

    super().__init__(self, name, base_stats, base_growths)
    

    a:

    super().__init__(name, base_stats, base_growths)
    

    Esto debería solucionar el error y permitirle crear instancias de la clase Knight utilizando el constructor de la clase padre.

    En cuanto a la salida que está viendo al ejecutar el código, <__main__.Knight object at 0x0000029B854FBFA0> es simplemente la representación de cadena de la instancia de la clase Knight que está creando. Le muestra la ubicación de memoria del objeto, que es un identificador único para él. No significa ningún error o problema con el código.

Comments are closed.