Menu
CoddyTech

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 sound

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

challenge icon

Desafío

Intermedio

En este desafío, implementarás un sistema de herencia de vehículos.

Tendrás que editar estos archivos:

  • vehicle.py: Implementa la clase base Vehicle con atributos make/model y métodos
  • car.py: Crea la clase Car que hereda de Vehicle
  • motorcycle.py: Crea la clase Motorcycle que hereda de Vehicle
  • truck.py: Crea la clase Truck que hereda de Vehicle

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))
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de Python online