Guía de Referencia 1: El Plano de los Datos
Antes de escribir una sola función, un buen gerente decide cómo se va a etiquetar cada caja. Si el formato de los datos está mal diseñado, todo lo que construyas encima hereda el problema. Esta guía define ese formato: cómo se ve un producto en memoria y cómo se ve en el disco.
El Producto es un Diccionario
Cada producto del almacén es un diccionario con cuatro casilleros fijos:
producto: dict = {
"id": "1",
"nombre": "Tornillos",
"precio": 5.5,
"stock": 500
}
Este es el esquema completo de la entidad Producto:
| Campo | Tipo | Descripción |
|---|---|---|
id | str | Identificador único |
nombre | str | Nombre descriptivo |
precio | float | Valor unitario |
stock | int | Cantidad disponible |
El id va como str porque es una etiqueta, no una cantidad. Nunca vas a sumar dos IDs ni calcular su promedio, así que tratarlo como texto es lo natural.
El Inventario es una Lista de Diccionarios
Un solo producto no hace un almacén. El inventario completo es una lista donde cada elemento es uno de esos diccionarios:
inventario: list[dict] = [
{"id": "1", "nombre": "Tornillos", "precio": 5.5, "stock": 500},
{"id": "2", "nombre": "Clavos", "precio": 2.25, "stock": 50}
]
Esta combinación te da las dos ventajas a la vez: la lista mantiene el orden y se recorre con for; el diccionario te deja preguntar por producto["precio"] sin adivinar posiciones.
El Formato en Disco: JSON
La RAM es volátil. Para que el inventario sobreviva al cierre del programa, lo escribimos en disco en formato JSON, que ya conociste en el Capítulo 11: guarda la lista de diccionarios tal cual, con los tipos intactos.
[
{"id": "1", "nombre": "Tornillos", "precio": 5.5, "stock": 500},
{"id": "2", "nombre": "Clavos", "precio": 2.25, "stock": 50}
]
Con JSON los tipos sobreviven al viaje: el 5.5 vuelve como float, no como el texto "5.5", y no hay que aplanar cada producto ni reconstruirlo después. Esa conversión manual es justo donde se cuelan los bugs, y JSON la elimina de raíz. Por eso es la memoria permanente del proyecto.
La Constante del Sistema
La ruta del archivo se usa en varias partes del programa. La definimos una sola vez, arriba del archivo:
from pathlib import Path
RUTA_INVENTARIO = Path("inventario.json")
(En la edición web esa ruta vive en la memoria temporal del navegador: el inventario que guardes ahí se pierde al cerrar la pestaña. Para que sobreviva de verdad, corre el proyecto en tu terminal.)
Si mañana decides cambiar el nombre del archivo, lo cambias en un solo lugar.
Con el plano de los datos definido, toca construir la función fábrica que arma productos sin errores de dedo: sigue con la Guía de Referencia 2.