Menu
Coddy logo textTech

Sobreescritura de métodos revisitada

Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 23 de 64.

El polimorfismo significa "muchas formas" y permite que objetos de diferentes clases respondan de manera diferente a la misma llamada a un método. La sobrescritura de métodos hace que esto sea posible.

Aquí hay 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()]

Llamar 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 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 correcto.

Punto clave: El polimorfismo permite tratar diferentes objetos de la misma manera a través de una interfaz común. La sobrescritura de métodos proporciona diferentes implementaciones, mientras que el polimorfismo permite llamarlas de manera uniforme. Esto hace que el código sea más flexible y fácil de extender.

challenge icon

Desafío

Intermedio

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

Necesitarás editar estos archivos:

  • vehicle.py: Implementa la clase base Vehicle con atributos de marca/modelo 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 TODO detallados para guiar tu implementación paso a paso. Presta atención a las sentencias 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 en todos los tipos de vehículos.

Hoja de referencia

El polimorfismo permite que objetos de diferentes clases respondan de manera distinta a la misma llamada a un método a través de la sobrescritura de métodos.

Crea una clase padre con un método:

class Animal:
    def speak(self):
        return "Animal makes a sound"

Las clases hijas sobrescriben el mismo método:

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

Llama al mismo método en diferentes objetos:

animals = [Dog(), Cat(), Animal()]
for animal in animals:
    print(animal.speak())  # Cada uno imprime una salida diferente

Usa el polimorfismo con funciones:

def make_animal_speak(animal):
    print(animal.speak())

make_animal_speak(Dog())  # Woof!
make_animal_speak(Cat())  # Meow!

El polimorfismo te permite tratar diferentes objetos de la misma manera a través de una interfaz común, haciendo que el código sea más flexible y fácil de extender.

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"


# Probar con diferentes vehículos - NO MODIFICAR 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 Object Oriented Programming