Programacion orientada a objetos
La programacion orientada a objetos permite agrupar datos y comportamiento. No necesitas usar clases para todo, pero son utiles cuando una entidad tiene estado y acciones.
Primera clase
Sección titulada «Primera clase»class Usuario: def __init__(self, nombre, puntos): self.nombre = nombre self.puntos = puntos
def esta_activo(self): return self.puntos > 0
usuario = Usuario("Ana", 40)
print(usuario.nombre)print(usuario.esta_activo())Salida:
AnaTrueRetorno: usuario.esta_activo() devuelve bool.
self representa el objeto actual. Cuando llamas usuario.esta_activo(), Python pasa usuario como primer argumento internamente.
Metodos que cambian estado
Sección titulada «Metodos que cambian estado»class Cuenta: def __init__(self, saldo=0): self.saldo = saldo
def depositar(self, monto): self.saldo += monto return self.saldo
def retirar(self, monto): if monto > self.saldo: return False self.saldo -= monto return True
cuenta = Cuenta(100)
print(cuenta.depositar(50))print(cuenta.retirar(30))print(cuenta.saldo)Salida:
150True120dataclass
Sección titulada «dataclass»Para clases que principalmente guardan datos, dataclass reduce ruido.
from dataclasses import dataclass
@dataclassclass Producto: nombre: str precio: float stock: int = 0
def disponible(self): return self.stock > 0
producto = Producto("Teclado", 45.5, 3)
print(producto)print(producto.disponible())Salida:
Producto(nombre='Teclado', precio=45.5, stock=3)TrueCuando usar clases
Sección titulada «Cuando usar clases»Usa clases cuando:
- Hay datos que pertenecen juntos:
Usuario,Producto,Cuenta. - Hay acciones que modifican esos datos:
depositar,activar,marcar_completada. - Quieres representar conceptos del dominio de tu programa.
Prefiere funciones simples cuando:
- La logica no necesita guardar estado.
- Solo transformas entradas en salidas.
- El programa todavia es pequeno.
Practica
Sección titulada «Practica»class Tarea: def __init__(self, titulo): self.titulo = titulo self.completada = False
def completar(self): self.completada = True return self.completada
def resumen(self): estado = "ok" if self.completada else "pendiente" return f"{self.titulo}: {estado}"
tarea = Tarea("Practicar funciones")
print(tarea.resumen())print(tarea.completar())print(tarea.resumen())Salida:
Practicar funciones: pendienteTruePracticar funciones: okRetornos: completar() devuelve True; resumen() devuelve un str.