Exploraremos los fundamentos de la programación orientada a objetos (OOP) en Python, incluyendo clases, objetos, herencia y más.
Una clase es una plantilla para crear objetos (instancias), mientras que un objeto es una instancia de una clase.
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def saludar(self):
return f"Hola, soy {self.nombre} y tengo {self.edad} años."
# Crear un objeto
persona1 = Persona("Ana", 25)
print(persona1.saludar()) # Salida: Hola, soy Ana y tengo 25 años
El encapsulamiento permite restringir el acceso directo a los datos modificándolos a través de métodos.
class CuentaBancaria:
def __init__(self, balance):
self.__balance = balance # Variable privada
def depositar(self, monto):
self.__balance += monto
def get_balance(self):
return self.__balance
cuenta = CuentaBancaria(1000)
cuenta.depositar(500)
print(cuenta.get_balance()) # Salida: 1500
La herencia permite que una clase hija herede los atributos y métodos de una clase padre.
class Animal:
def hablar(self):
return "Sonido de animal"
class Perro(Animal):
def hablar(self):
return "Guau!"
class Gato(Animal):
def hablar(self):
return "Miau!"
animales = [Perro(), Gato()]
for animal in animales:
print(animal.hablar()) # Salida: Guau! Miau!
El polimorfismo permite que diferentes clases usen el mismo método de forma distinta.
class Vehiculo:
def mover(self):
pass
class Coche(Vehiculo):
def mover(self):
return "El coche se mueve en la carretera."
class Barco(Vehiculo):
def mover(self):
return "El barco navega en el agua."
vehiculos = [Coche(), Barco()]
for vehiculo in vehiculos:
print(vehiculo.mover())
# Salida: El coche se mueve en la carretera.
# El barco navega en el agua.
La abstracción permite ocultar los detalles complejos de una función, presentando solo lo esencial.
from abc import ABC, abstractmethod
class Ave(ABC):
@abstractmethod
def volar(self):
pass
class Aguila(Ave):
def volar(self):
return "El águila vuela alto!"
class Pinguino(Ave):
def volar(self):
return "El pingüino no vuela, nada."
aves = [Aguila(), Pinguino()]
for ave in aves:
print(ave.volar())
# Salida: El águila vuela alto!
# El pingüino no vuela, nada.
Python tiene métodos especiales como `__str__` y `__repr__`, que controlan cómo se muestra el objeto cuando se imprime.
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def __str__(self):
return f"{self.nombre}, {self.edad} años"
persona1 = Persona("Carlos", 30)
print(persona1) # Salida: Carlos, 30 años
La programación orientada a objetos en Python permite crear aplicaciones organizadas y reutilizables. Con estos conceptos, es posible construir programas más complejos y mantenibles.