Saltar al contenido principal
🔒 Modo vista previa. Las primeras quince lecciones de Foundations son gratis; esta es Pro. Inicia un trial de 7 días para desbloquear el editor, las pistas AI y el resto del programa. Tarjeta requerida, cancela cuando quieras en Dashboard.Iniciar trial de 7 días →
← CursosSenior Deep-DivesModule 11 · Decorator patterns at scaleDescriptor protocol — the mechanic under @property and ORM columnspredict155 / 161
+150 XP
Tarea
📝 **Tarea:** Predecir la salida de 4 líneas. Un descriptor "Positivo" valida que las asignaciones sean entradas positivas. La clase `Cuenta` lo usa para dos atributos (saldo + antigüedad). Prueba: conjunto normal + get funciona, el valor negativo desencadena ValueError, el acceso a nivel de clase devuelve el descriptor en sí (no el valor), los valores por instancia son independientes. 📋 Implemente la función anterior. Las pruebas se ejecutan automáticamente. 💡 **Pista:** Vuelve a leer la teoría si te quedas atascado.
Predice la salida

Lee el código con atención

class Positive:
    def __set_name__(self, owner, name: str) -> None:
        self.name = name

    def __get__(self, instance, owner):
        if instance is None:
            return self
        return instance.__dict__[self.name]

    def __set__(self, instance, value) -> None:
        if not isinstance(value, int) or value <= 0:
            raise ValueError(f"{self.name} must be positive int, got {value!r}")
        instance.__dict__[self.name] = value


class Account:
    balance = Positive()
    age = Positive()


a = Account()
a.balance = 100
a.age = 30
print(a.balance, a.age)

try:
    a.balance = -5
except ValueError as e:
    print(f"rejected: {e}")

# Class-level access returns the descriptor itself, not a value
print(type(Account.balance).__name__)

# Per-instance values are independent
b = Account()
b.balance = 200
print(a.balance, b.balance)

¿Qué imprimirá el programa? Escribe aquí:

💬 Discusión

Sé el primero en hacer una pregunta o compartir un consejo.
Inicia sesión para unirte a la discusión. Leer es gratis.
Cargando discusión…