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.

Crear una clase hija a partir de una clase padre, con los mismos argumentos.

Tengo una clase padre Parent y una clase hija Child que reenvía todos los argumentos de inicialización a Parent. (Solo agrega unos pocos métodos).

class Parent:
    def <strong>init</strong>(self, alpha, beta, zeta, omicron):
        self.alpha = alpha
        self.c = alpha + beta + zeta + omicron

class Child(Parent):
    def <strong>init</strong>(self, <em>*args</em>, **kwargs):
        super().<strong>init</strong>(<em>*args</em>, **kwargs)

<pre><code>def show(self):
    print(self.alpha, self.c)
</code></pre>

p = Parent(23.7, 0.0, 1.0, -4.1)

<h1>¿Cómo crear un hijo a partir de p?</h1>

<h1>c = ... ?</h1>

<code>
Dado una instancia de la clase padre, ¿cómo puedo crear mejor una instancia de la clase hija a partir de ella?
Se me ocurrió agregar algo como
</code>python
@classmethod
def from_parent(cls, parent):
    return cls(
        parent.alpha,
        # parent.beta,
        # parent.zeta,
        # parent.omicron
    )

pero Parent no tiene todos los argumentos necesarios para crear otra instancia a partir de ella.

¿Alguna pista?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Dado que Child envía todos los argumentos a Parent, podemos simplemente crear una instancia de Child usando los mismos argumentos que se utilizaron para crear la instancia de Parent. Aquí hay un ejemplo:

    p = Parent(23.7, 0.0, 1.0, -4.1)
    
    c = Child(p.alpha, 0.0, 1.0, p.c - p.alpha)
    
    c.show() # Salida: 23.7 20.6
    

    En este ejemplo, creamos una instancia de Child llamada c a partir de la instancia de Parent llamada p. Pasamos p.alpha como primer argumento y configuramos los otros argumentos con valores apropiados para que la instancia resultante de Child tenga las mismas propiedades que p. Luego llamamos al método show de c para verificar que se haya creado correctamente.

Comments are closed.