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:
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.