Repaso de la sobrescritura de métodos
Parte de la sección Programación orientada a objetos del Journey de Python de Coddy. Lección 23 de 64.
El polimorfismo significa «muchas formas» y permite que los objetos de distintas clases respondan de manera diferente a la misma llamada a un método. La sobrescritura de métodos lo hace posible.
Aquí tienes una clase padre con un método:
class Animal:
def speak(self):
return "Animal makes a sound"Crea clases hijas que sobrescriban el mismo método:
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class Cow(Animal):
def speak(self):
return "Moo!"Cada clase hija proporciona su propia implementación de speak().
Crea una lista de diferentes animales:
animals = [Dog(), Cat(), Cow(), Animal()]Llama al mismo método en todos los objetos:
for animal in animals:
print(animal.speak())Salida:
Woof!
Meow!
Moo!
Animal makes a soundEsto es el polimorfismo en acción: la misma llamada al método se comporta de manera diferente según el tipo real del objeto.
También puedes usar el polimorfismo con funciones:
def make_animal_speak(animal):
print(animal.speak())
dog = Dog()
cat = Cat()
make_animal_speak(dog) # ¡Guau!
make_animal_speak(cat) # ¡Miau!La función no necesita saber qué tipo de animal recibe: simplemente llama a speak() y obtiene el comportamiento adecuado.
Punto clave: El polimorfismo te permite tratar distintos objetos de la misma manera mediante una interfaz común. La sobrescritura de métodos proporciona diferentes implementaciones, mientras que el polimorfismo te permite llamarlos de manera uniforme. Esto hace que el código sea más flexible y fácil de ampliar.
Desafío
IntermedioEn este desafío, implementarás un sistema de herencia de vehículos.
Tendrás que editar estos archivos:
vehicle.py: Implementa la clase baseVehiclecon atributos make/model y métodoscar.py: Crea la claseCarque hereda deVehiclemotorcycle.py: Crea la claseMotorcycleque hereda deVehicletruck.py: Crea la claseTruckque hereda deVehicle
Cada archivo contiene comentarios detallados de TODO para guiarte paso a paso en la implementación. Presta atención a las instrucciones de importación necesarias entre los archivos y sigue las relaciones de herencia. El archivo driver.py contiene casos de prueba que verificarán que tu implementación funcione correctamente con todos los tipos de vehículos.
Pruébalo tú mismo
from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from truck import Truck
def vehicle_info(vehicle):
return f"{vehicle.make} {vehicle.model}: {vehicle.start()}, Efficiency: {vehicle.fuel_efficiency()} mpg"
# Prueba con diferentes vehículos - NO MODIFIQUES ESTE CÓDIGO DE PRUEBA
vehicles = [
Car("Toyota", "Camry"),
Motorcycle("Harley", "Davidson"),
Truck("Ford", "F-150"),
Vehicle("Generic", "Vehicle")
]
for v in vehicles:
print(vehicle_info(v))Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Fundamentos de la POO
Introducción a la POOArchivos externosClases vs. objetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Repaso: calculadora sencilla4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosRepaso: jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso: lista personalizada10Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador de propiedadDecorador de método estáticoDecorador de método de clase5Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas8Conceptos avanzados de POO
Composición frente a herenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs. variables de claseDecoradores de propiedadesAtributos privadosRepaso: gestor de cuentas bancariasPractica por tu cuenta: Compilador de Python online