Día 8: Programación orientada a objetos (POO)

Bienvenida
¡Bienvenido al Día 8 de tu viaje para dominar Python! 🎉
Hoy es un día crucial porque aprenderás los fundamentos de la Programación Orientada a Objetos (POO). Descubrirás cómo crear clases, definir atributos y métodos, y trabajar con conceptos avanzados como herencia y polimorfismo. Además, practicarás creando clases y objetos para modelar problemas del mundo real.
Clases y objetos en Python
En Python, las clases son plantillas para crear objetos. Un objeto es una instancia de una clase y puede tener sus propios atributos y métodos.
Definición de una clase
class Coche:
# Atributos (características del coche)
marca = "Toyota"
modelo = "Corolla"
año = 2020
# Métodos (acciones que puede realizar el coche)
def arrancar(self):
print("El coche ha arrancado.")
def detener(self):
print("El coche se ha detenido.")
Creación de objetos
mi_coche = Coche() # Crear un objeto de la clase Coche.
print(mi_coche.marca) # Imprime: Toyota
mi_coche.arrancar() # Imprime: El coche ha arrancado.
mi_coche.detener() # Imprime: El coche se ha detenido.
Constructores (__init__
)
Los constructores (__init__
) son métodos especiales que se ejecutan cuando se crea un objeto de una clase. Permite inicializar los atributos de la clase con valores predeterminados.
class Coche:
def __init__(self, marca, modelo, año):
self.marca = marca
self.modelo = modelo
self.año = año
def arrancar(self):
print(f"El {self.marca} {self.modelo} ha arrancado.")
def detener(self):
print(f"El {self.marca} {self.modelo} se ha detenido.")
Herencia de clases
Las clases pueden heredar de otras clases. En este caso, la clase Coche
hereda de la clase Vehiculo
.
class Vehiculo:
def __init__(self, marca, modelo):
self.marca = marca
self.modelo = modelo
def arrancar(self):
print(f"El {self.marca} {self.modelo} ha arrancado.")
def detener(self):
print(f"El {self.marca} {self.modelo} se ha detenido.")
class Coche(Vehiculo): # Coche hereda de Vehiculo.
def __init__(self, marca, modelo, num_puertas):
super().__init__(marca, modelo)
self.num_puertas = num_puertas
def abrir_puertas(self):
print(f"El {self.marca} {self.modelo} tiene {self.num_puertas} puertas.")
mi_coche = Coche("Toyota", "Corolla", 4)
mi_coche.arrancar() # Imprime: El Toyota Corolla ha arrancado.
mi_coche.abrir_puertas() # Imprime: El Toyota Corolla tiene 4 puertas.
Polimorfismo
En Python, las clases pueden tener diferentes métodos para la misma acción. Esto se llama polimorfismo.
class Vehiculo:
def arrancar(self):
print("El vehículo ha arrancado.")
class Coche(Vehiculo):
def arrancar(self):
print("El coche ha arrancado.")
mi_coche = Coche()
mi_coche.arrancar() # Imprime: El coche ha arrancado.
mi_vehiculo = Vehiculo()
mi_vehiculo.arrancar() # Imprime: El vehículo ha arrancado.
Metodos estáticos
Los métodos estáticos son métodos que no dependen de la instancia del objeto. En otras palabras, son métodos que se pueden llamar sin crear un objeto de la clase.
class Coche:
@staticmethod
def arrancar():
print("El coche ha arrancado.")
Coche.arrancar() # Imprime: El coche ha arrancado.
Métodos especiales
Los métodos especiales son métodos que se llaman automáticamente en ciertas situaciones. Por ejemplo, el metodo __init__
se llama cuando se crea un objeto de la clase.
__str__
El metodo __str__
se llama cuando se imprime un objeto de la clase. Por ejemplo:
class Coche:
def __init__(self, marca, modelo, año):
self.marca = marca
self.modelo = modelo
self.año = año
def __str__(self):
return f"{self.marca} {self.modelo} ({self.año})"
mi_coche = Coche("Toyota", "Corolla", 2020)
print(mi_coche) # Imprime: Toyota Corolla (2020)
__len__
El metodo __len__
se llama cuando se llama a la longitud de un objeto de la clase. Por ejemplo:
class Coche:
def __init__(self, marca, modelo, num_puertas):
self.marca = marca
self.modelo = modelo
self.num_puertas = num_puertas
def __len__(self):
return self.num_puertas
mi_coche = Coche("Toyota", "Corolla", 4)
print(len(mi_coche)) # Imprime: 4
¡Felicidades! Has completado el Día 8. Ahora sabes cómo trabajar con clases, objetos, herencia y polimorfismo en Python. ¡Nos vemos en el Día 9! 🚀✨