Dataclasses, a fondo en Python
frozen, slots, fábricas de valores por defecto y __post_init__.
from dataclasses import dataclass, field
@dataclass(frozen=True, slots=True, order=True)
class Resultado:
tpm: float
lang: str = "python"
etiquetas: tuple[str, ...] = ()
@dataclass
class Sesion:
runs: list[Resultado] = field(default_factory=list)
best: float = field(init=False, default=0.0)
def __post_init__(self):
self.best = max((r.tpm for r in self.runs), default=0.0)
a, b = Resultado(104.0), Resultado(98.0, "rust")
print(sorted([a, b])[0].lang, hash(a) is not None)
print(Sesion([a, b]).best)
Cómo funciona
frozen=Truehace las instancias hashables e inmutables.field(default_factory=...)es la manera segura de tener un valor por defecto mutable.__post_init__corre después del init generado, para valores derivados.
Palabras clave y builtins usados aquí
classdeffloatforhashlistmaxprintselfsortedstrtuple
El intento, en números
- Líneas
- 22
- Caracteres a escribir
- 507
- Tokens
- 159
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 91 segundos.
Paso 1 de 3 en Datos y enums; paso 45 de 53 en Python pythónico.