EAS Latam Academy Logo EAS Latam

Módulo 2: Python Intermedio

Programación Orientada a Objetos (POO) en Python

Este módulo profundiza en la Programación Orientada a Objetos (POO) en Python, el manejo de errores, la gestión de módulos y paquetes, y la interacción con archivos.

Clases y Objetos

  • Clases: Planos o plantillas para crear objetos. Definen atributos (variables) y métodos (funciones).
  • Objetos (Instancias): Ejemplares concretos de una clase.
class Coche:
    def __init__(self, marca, modelo): # Constructor
        self.marca = marca
        self.modelo = modelo
        self.velocidad = 0

    def acelerar(self, incremento):
        self.velocidad += incremento
        print(f"{self.marca} {self.modelo} acelerando a {self.velocidad} km/h")

mi_coche = Coche("Toyota", "Corolla")
mi_coche.acelerar(50) # Toyota Corolla acelerando a 50 km/h

Herencia

Permite que una clase (subclase) herede atributos y métodos de otra clase (superclase), promoviendo la reutilización de código.

class Electrico(Coche):
    def __init__(self, marca, modelo, bateria):
        super().__init__(marca, modelo) # Llama al constructor de la clase padre
        self.bateria = bateria
    
    def cargar(self):
        print(f"Cargando {self.marca} {self.modelo}. Nivel de batería: {self.bateria}%")

mi_coche_electrico = Electrico("Tesla", "Model 3", 80)
mi_coche_electrico.acelerar(70)
mi_coche_electrico.cargar()

Encapsulamiento y Polimorfismo

  • Encapsulamiento: Controlar el acceso a los atributos y métodos de un objeto (aunque en Python es más por convención, usando _ o __ para indicar privacidad).
  • Polimorfismo: La capacidad de objetos de diferentes clases de responder al mismo mensaje (llamada de método) de maneras diferentes.

Manejo de Errores y Excepciones

Es crucial para crear programas robustos.

try, except, else, finally

try:
    resultado = 10 / 0
except ZeroDivisionError:
    print("Error: División por cero no permitida.")
except TypeError:
    print("Error: Tipo de dato incorrecto.")
else:
    print(f"La operación fue exitosa: {resultado}")
finally:
    print("Este bloque siempre se ejecuta.")

Lanzar Excepciones (raise)

def verificar_edad(edad):
    if edad < 0:
        raise ValueError("La edad no puede ser negativa.")
    print(f"Edad válida: {edad}")

try:
    verificar_edad(-5)
except ValueError as e:
    print(e)

Módulos y Paquetes

Organiza tu código para hacerlo reutilizable y mantenible.

  • Módulos: Archivos .py que contienen código Python.
  • Paquetes: Directorios que contienen múltiples módulos y un archivo __init__.py (opcional en Python 3.3+).
# mi_modulo.py
def saludar(nombre):
    return f"Hola desde mi_modulo, {nombre}"

# otro_script.py
import mi_modulo
print(mi_modulo.saludar("Ana"))

Operaciones con Archivos

Leer y escribir datos en archivos es una operación fundamental.

# Escritura
with open('ejemplo.txt', 'w') as f: # 'w' para escritura (sobrescribe)
    f.write("Hola, mundo!\n")
    f.write("Este es un ejemplo de escritura.")

# Lectura
with open('ejemplo.txt', 'r') as f: # 'r' para lectura
    contenido = f.read()
    print(contenido)

# Añadir (append)
with open('ejemplo.txt', 'a') as f: # 'a' para añadir
    f.write("\nNueva línea al final.")

Comprensión de Listas (List Comprehensions)

Una forma concisa y eficiente de crear listas.

# Sintaxis básica: [expresion for elemento in iterable if condicion]
cuadrados = [x**2 for x in range(10) if x % 2 == 0] # [0, 4, 16, 36, 64]

# También existen comprensiones para diccionarios y conjuntos
diccionario_cuadrados = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Conclusión

Este módulo ha cubierto conceptos intermedios cruciales en Python. La comprensión de la POO, el manejo de errores efectivo y la organización del código a través de módulos son habilidades indispensables para desarrollar aplicaciones más grandes y robustas. La práctica con archivos y las comprensiones te permitirán escribir código más idiomático y eficiente.

¿Listo para el desafío?

Has revisado la teoría. Ahora es momento de poner a prueba tus conocimientos.

Iniciar Desafío