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.

Métodos de clase en Python para construir clases hijas.

No sé cómo reutilizar de manera limpia el método de clase de una clase derivada en Python para construir la clase hija:

class Base:
    def __init__(... muchos parámetros ....)
        ... asignar parámetros ....

    @classmethod
    def from_file(cls, archivo)
        .... leer muchos parámetros ....
        return cls(.... muchos parámetros ....)

class Derived(Base):
    def __init__(parametro_derivado, .... parámetros base .....)
        super().__init__(parámetros base)

    @classmethod
    def from_file(cls, archivo)
        ??? ¿Tengo que replicar todo el código de Base.from_file() aquí ????
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para reutilizar de manera limpia el classmethod de una clase derivada en Python para construir la clase hija, puedes utilizar la función super() junto con el método from_file() de la clase base. Por lo tanto, en el método from_file() de la clase Derived, puedes simplemente llamar a super().from_file(file) para llamar al mismo método de la clase padre y luego pasar los parámetros resultantes al constructor de la clase derivada. De esta manera, no es necesario replicar el código de la clase Base en la clase Derived.

    Aquí tienes una implementación actualizada de la clase Derived:

    class Derived(Base):
         def __init__(self, derived_param, .... parámetros base ..... ):
             super().__init__(parámetros base)
             self.derived_param = derived_param
    
         @classmethod
         def from_file(cls, file):
             base_params = super().from_file(file)
             derived_param = ... leer derived_param del archivo ...
             return cls(derived_param, *base_params)
    

    Ten en cuenta que primero llamamos al método from_file() de la clase padre usando super().from_file(file), lo cual devuelve los parámetros base necesarios para construir el objeto Base. Luego leemos el parámetro derived_param del archivo y finalmente llamamos al constructor de la clase Derived con tanto derived_param como base_params, utilizando el operador * para pasarlos como argumentos separados.

Comments are closed.