Lección 14 de 16 · dataclass(frozen=True) y operadores
Value Object: valores que no cambian
Ver que a + b llama a un método, que el Value Object crea objetos nuevos y que == compara por valor.
t<0 Antes de ejecutar
Lee el código y comprométete con una predicción
Mientras tanto, Python ya hizo su parte de t<0: leyó y compiló el archivo completo. Ninguna variable existe todavía.
programa.py
1from dataclasses import dataclass 2 3@dataclass(frozen=True) 4class Monto: 5 valor: int 6 moneda: str 7 8 def __add__(self, otro): 9 if self.moneda != otro.moneda: 10 raise ValueError("Monedas distintas") 11 return Monto(self.valor + otro.valor, self.moneda) 12 13a = Monto(10, "PEN") 14b = Monto(5, "PEN") 15total = a + b 16print(total) 17print(a == Monto(10, "PEN"))
t=0 t>0 Ejecución paso a paso
Qué se ejecuta primero y dónde vive cada variable
Avanza con Siguiente paso o las flechas del teclado. Pasa el mouse por una variable para ver a qué objeto apunta.
t=-1
Antes de ejecutar
Python lee y compila el archivo
1from dataclasses import dataclass2 3@dataclass(frozen=True)4class Monto:5 valor: int6 moneda: str7 8 def __add__(self, otro):9 if self.moneda != otro.moneda:10 raise ValueError("Monedas distintas")11 return Monto(self.valor + otro.valor, self.moneda)12 13a = Monto(10, "PEN")14b = Monto(5, "PEN")15total = a + b16print(total)17print(a == Monto(10, "PEN"))
Salida
(vacía)
Qué pasó
- Antes de ejecutar nada, Python lee el archivo completo y lo compila a bytecode: instrucciones que su máquina virtual entiende.
- Si hubiera un error de sintaxis, el programa fallaría aquí, sin ejecutar ni una sola línea.
- Nombres que aparecen en el código: Monto, ValueError, a, b, dataclass, dataclasses, moneda, otro, print, self, total, valor. Ninguno existe todavía en memoria.
Pila de marcos · dónde viven los nombres
Todavía no hay marcos: ninguna variable existe.
Montón · dónde viven los objetos
Ningún objeto todavía.
Idea clave
a + b no suma números: llama a a.__add__(b), que verifica la moneda y crea un Monto nuevo. a y b no cambian nunca (frozen). Dos Monto con los mismos valores son iguales aunque vivan en direcciones distintas.
t>0 Después: repaso sin mirar
Recupera de memoria
Responde sin volver al paso a paso. Para dominar la lección necesitas 2 de 2.
Explícalo con tus palabras (Feynman)
Dominio de la lección
Aún no
- Falta la predicción (t<0)
- Repaso: 0 de 2 (se necesitan 2)