Перейти к основному содержимому
🔒 Режим превью. Первые 15 уроков Foundations — бесплатные; этот — Pro. Запусти 7-дневный trial чтобы открыть редактор, AI-подсказки и остальной курс. Нужна карта, отмена в Dashboard в любой момент.Начать 7-дневный trial →
← КурсыSenior Deep-DivesModule 11 · Decorator patterns at scaleDescriptor protocol — the mechanic under @property and ORM columnspredict155 / 161
+150 XP
Задание
📝 **Задание:** Предскажите результат в 4 строки. Дескриптор Positive подтверждает, что присваивания являются положительными целыми числами. Класс Account использует его для двух атрибутов (баланс + возраст). Тест: обычный набор + get работает, отрицательное значение вызывает ValueError, доступ на уровне класса возвращает сам дескриптор (а не значение), значения для каждого экземпляра независимы. 📋 Реализуйте функцию выше. Тесты запускаются автоматически. 💡 **Подсказка:** Если вы застряли, перечитайте теорию.
Предскажи вывод

Прочти код внимательно

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)

Что выведет программа? Напиши здесь:

💬 Обсуждение

Будьте первым — задайте вопрос или поделитесь подсказкой.
Войдите чтобы участвовать в обсуждении. Чтение бесплатно.
Загрузка обсуждения…