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