lunes, 14 de julio de 2025

16 Python 3.13. POO Herencia

 

Para qué sirve la herencia:
- Reutilización de código, para crear objetos similares.

 

Qué características en común van a tener todos los objetos que vamos a crear mediante la herencia (Marca, Modelo…).

Qué comportamientos en común tienen todos estos objetos (Arrancan, Aceleran, Frenan, Giran…).

 

Tendremos que crear una clase padre o super clase que englobará todos estas propiedades y métodos comunes a todos los objetos que heredarán esta clase.

Y luego una clase que herede del padre, donde crearemos estas propiedades y métodos únicos para este objeto en particular.

Python admite la herencia múltiple, podemos heredar de dos clases o más.

Hemos de separar las clases por una coma:
    class Nueva_Clase(Clase01, Clase02,…):
Heredará todos los métodos y las propiedades de las dos clases.
Si las dos clases heredadas tienen o no un constructor o dos métodos con el mismo nombre, heredará el constructor o el método, de la primera que se indica en los parámetros de la herencia.
Siempre se da preferencia a la que está a la primera.

- Dos funciones muy utilizadas:
- super()        Va a llamar al método constructor de la clase padre.
- isinstance()
Nos informa de si un objeto es una instancia de una clase determinada. Retorna True o False.

# Creamos una clase padre común a todos nuestros objetos...

class Aviones():
                # Definimos un método constructor...
                def __init__(self, marca, modelo):
                               # Pasamos unos parámetros...
                               self.marca=marca
                               self.modelo=modelo
                               self.volar=False
                               self.aterrizar=False
                               self.acelerar=False
                               self.frenar=False

                # Creamos los metodos...
                def vuela(self):
                               self.volar=True

                def aterriza(self):
                               self.aterrizar=True

                def acelera(self):
                               self.acelerar=True

                def frena(self):
                               self.frenar=True

                def estado(self):
                               print(f"Marca: {self.marca}.\nModelo: {self.modelo}.")
                               print(f"Vuela: {self.volar}.\nAterriza: {self.aterrizar}.")
                               print(f"Acelera: {self.acelerar}.\nFrena: {self.frenar}.")
# Fin Clase Aviones...

print("********        ********")

# Sintaxis para heredar una clase
# Class Nombre_Clase(Clase_Padre):
class Reactor(Aviones):
               
#pass # Para que no construya nada de momento.
                VSonica="Normal..."
                def VSonido(self): # Metodo no heredado...
                               self.VSonica="Utra Sonica!!!"

                # Sobreescribimos el método heredado estado...
                def estado(self):
                               print(f"Marca: {self.marca}.\nModelo: {self.modelo}.")
                               print(f"Vuela: {self.volar}.\nAterriza: {self.aterrizar}.")
                               print(f"Acelera: {self.acelerar}.\nFrena: {self.frenar}.")
                               print(f"Velocidad: {self.VSonica}.")
# Fin Subclase Reactor...

# Instanciamos un objeto de la subclase Reactor...
Sonico01=Reactor("Sonico01", "S01")# Pasamos los parámetros marca, modelo...
# Accedo al método estado...
# Llamo al Método VSonido dentro de la Clase Reactor...
#
Sonico01.VSonido()
Sonico01.estado()

print("********        ********")

class Cargero(Aviones):
                def carga(self, cargar):
                               self.cargada=cargar
                               if(self.cargada==True):
                                               return "Cargero Cargado!!!"
                               else:

                                               return "Cargero Cargando..."

Cargero01=Cargero("Cargero01", "A540")
Cargero01.estado()
print(Cargero01.carga(False))

print("********        ********")

class Espia(Reactor):# Hereda de Reactor
                pass

Espia01=Espia("Espia01", "Black")
Espia01.VSonido()
Espia01.estado()

print("********        ********")

class HelicopCarga():
                def __init__(self,distancia, marca, modelo):
                               self.Kilometros=distancia
                               print(f"* Km Autonomía: {self.Kilometros}.")
                               super().__init__(marca, modelo)

                def carga(self, cargar):
                               self.cargada=cargar
                               if(self.cargada==True):
                                               return "Helicoptero Cargero Cargado!!!"
                               else:
                                               return "Helicoptero Cargero Cargando..."

class Helicoptero(HelicopCarga,Aviones):
                pass

Helicop01=Helicoptero(1000, "Helicop01", "FR345")
Helicop01.estado()
print(Helicop01.carga(True))

print("********        ********")

class Helicoptero02(Aviones, HelicopCarga):
                pass

Helicop02=Helicoptero02("Helicoptero02", "Antonof-454")
Helicop02.estado()
print(Helicop02.carga(True))

print("********        ********")

#print(isinstance(Helicop02, HelicopCarga))


No hay comentarios:

Publicar un comentario

Gracias por vuestros aportes.