/
IvanKhabarov
/
python
Обзор
Документация
Войти
/
IvanKhabarov
/
python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Practice/pw12/task6.py
58 строк
2 KB
Ivan-Khabarov
Added new tasks
09 окт 2024, 19:53
09 окт 2024, 19:53
6190c64
Код
Авторство
О чём код?
# Изменяем класс прямоугольника. # Заменяем пару декораторов проверяющих длину и ширину # на дескриптор с валидацией размера. class ValidatedAttribute: """Базовый класс дескриптора для атрибутов с валидацией.""" def __init__(self, validator): self.validator = validator def __set_name__(self, owner, name): self.name = name def __get__(self, instance, owner): if instance is None: return self else: return instance.__dict__[self.name] def __set__(self, instance, value): if self.validator(value): instance.__dict__[self.name] = value else: raise ValueError(f"Invalid value for '{self.name}'") class PositiveValidator: """Валет для проверки положительного значения.""" def __call__(self, value): return value > 0 class Rectangle: """Класс прямоугольника.""" width = ValidatedAttribute(PositiveValidator()) height = ValidatedAttribute(PositiveValidator()) def area(self): return self.width * self.height def perimeter(self): return 2 * (self.width + self.height) # Пример использования rect = Rectangle(3, 4) print(rect.area()) # Output: 12 print(rect.perimeter()) # Output: 18 try: rect.width = -1 except ValueError as e: print(e) # Output: Invalid value for 'width' rect.width = 5 print(rect.width) # Output: 5