Propiedades con validación en Python
Una propiedad vuelve el acceso al atributo una llamada a método, así las invariantes se cumplen.
class Intento:
def __init__(self, accuracy):
self.accuracy = accuracy
@property
def accuracy(self):
return self._accuracy
@accuracy.setter
def accuracy(self, valor):
if not 0 <= valor <= 100:
raise ValueError(f"precisión fuera de rango: {valor}")
self._accuracy = float(valor)
intento = Intento(97.5)
print(intento.accuracy)
try:
intento.accuracy = 140
except ValueError as exc:
print(exc)
Cómo funciona
- El getter se decora con
@property. - El setter es
@name.settery valida antes de guardar. - Quien llama sigue escribiendo sintaxis de atributo normal.
Palabras clave y builtins usados aquí
asclassdefexceptfloatifprintraisereturnselftry
El intento, en números
- Líneas
- 21
- Caracteres a escribir
- 393
- Tokens
- 95
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 54 segundos.
Paso 2 de 3 en Atributos y descriptores; paso 33 de 53 en Python pythónico.