Polimorfismo = múltiples formas
Sobrecarga de métodos:
Cuando una subclase cuenta con métodos con el mismo nombre que en la superclase, donde ambos métodos definen comportamientos diferentes.
El polimorfismo es la capacidad que tienen los objetos de diferentes clases para usar usar:
Los objetos pueden cambiar de forma y por tanto de métodos y atributos.
Ejemplo: un coche puede transformarse en moto. Su comportamiento cambiaría = cambiarían sus métodos.
class Coche():
def desplazamiento(self):
print("Me desplazo utilizando 4 ruedas")
class Moto():
def desplazamiento(self):
print("Me desplazo utilizando 2 ruedas")
class Camion():
def desplazamiento(self):
print("Me desplazo utilizando 6 ruedas")
miVehiculo1=Moto()
miVehiculo1.desplazamiento()
miVehiculo2=Coche()
miVehiculo2.desplazamiento()
miVehiculo3=Camion()
miVehiculo3.desplazamiento()
Me desplazo utilizando 2 ruedas Me desplazo utilizando 4 ruedas Me desplazo utilizando 6 ruedas
En lugar de ir creando cada instancia por separado y luego llamar al método desplazamiento uno a uno, podemos usar el polimorfismo.
Vamos a crear una función externa a las clases que llame al método que corresponda.
class Coche():
def desplazamiento(self):
print("Me desplazo utilizando 4 ruedas")
class Moto():
def desplazamiento(self):
print("Me desplazo utilizando 2 ruedas")
class Camion():
def desplazamiento(self):
print("Me desplazo utilizando 6 ruedas")
def desplazamientoVehiculo(vehiculo): # creamos una función que no pertenece a ningunaclase
vehiculo.desplazamiento() # al objeto vehiculo le aplicará el método desplazamiento que toque
miVehiculo=Camion() #creamos un objeto de tipo Camion
desplazamientoVehiculo(miVehiculo) #gracias al polimorfismo sabe que el desplazamiento del camión es con 6 ruedas
Me desplazo utilizando 6 ruedas
miVehiculo=Coche() #ahora cambiamos el tipo de objeto
desplazamientoVehiculo(miVehiculo) #ahora sabe que el objeto es un Coche y aplica el desplazamiento con 4 ruedas
Me desplazo utilizando 4 ruedas
miVehiculo=Moto() #ahora cambiamos nuevamente el tipo de objeto
desplazamientoVehiculo(miVehiculo) #gracias al polimorfismo sabe que una moto se desplaza con 2 ruedas
Me desplazo utilizando 2 ruedas
class Visa:
def tipo(self):
print("VISA oro")
def limite(self):
print(6000)
class MasterCard:
def tipo(self):
print("MasterCard black")
def limite(self):
print(3000)
def funcion(tarjeta): # función externa a las clases
tarjeta.tipo() # no se pone self
tarjeta.limite() # se pone tarjeta como en la función
v = Visa()
m = MasterCard()
funcion(v)
funcion(m) # ejecuta los dos métodos: tipo y límite
VISA oro 6000 MasterCard black 3000
Sin función externa.
class Animal:
def __init__(self, nombre):
self.nombre = nombre
def tipo(self):
print("Animal genérico que vive, siente y se mueve.")
class Leon(Animal):
def tipo(self):
print("Animal salvaje.")
class Perro(Animal):
def tipo(self):
print("Animal doméstico.")
a = Animal("Amuss")
l = Leon("Lionelo")
p = Perro("Pecox")
a.tipo()
l.tipo()
p.tipo()
Animal genérico que vive, siente y se mueve. Animal salvaje. Animal doméstico.
class Madrid:
def indice(self):
print("IBEX35")
def moneda(self):
print("Euro")
class NewYork:
def indice(self):
print("DOW JONES")
def moneda(self):
print("Dolar")
class Londres:
def indice(self):
print("FTSE 100")
def moneda(self):
print("Libra")
mad = Madrid()
ny = NewYork()
lon = Londres()
for bolsa in (mad,ny,lon): # hacemos un bucle que recorra los elementos
bolsa.indice()
bolsa.moneda()
print("="*15)
IBEX35 Euro =============== DOW JONES Dolar =============== FTSE 100 Libra ===============