typestar

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

  1. El getter se decora con @property.
  2. El setter es @name.setter y valida antes de guardar.
  3. Quien llama sigue escribiendo sintaxis de atributo normal.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Atributos y descriptores; paso 33 de 53 en Python pythónico.

← Anterior Siguiente →