From 99d509f6199efe73b37daaa825405863e3e0b357 Mon Sep 17 00:00:00 2001 From: taraskhom Date: Thu, 19 Dec 2024 14:49:12 +0200 Subject: [PATCH 1/2] Solution --- app/main.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 6 deletions(-) diff --git a/app/main.py b/app/main.py index 6d375672..4e5bd537 100644 --- a/app/main.py +++ b/app/main.py @@ -2,24 +2,89 @@ class IntegerRange: - pass + + def __set_name__(self, owner: object, name: str) -> None: + self.public_name = name + self.private_name = "_" + name + + def __init__( + self, + min_amount: int, + max_amount: int + ) -> None: + self.min_amount = min_amount + self.max_amount = max_amount + + def __get__( + self, + instance: object, + owner: object + ) -> int: + return getattr(instance, self.private_name) + + def __set__(self, instance: object, value: int) -> None: + if not isinstance(value, int): + raise TypeError + if self.min_amount <= value <= self.max_amount: + setattr(instance, self.private_name, value) + else: + raise ValueError class Visitor: - pass + def __init__( + self, + name: str, + age: int, + weight: int, + height: int + ) -> None: + self.name = name + self.age = age + self.weight = weight + self.height = height class SlideLimitationValidator(ABC): - pass + def __init__( + self, + age: int, + weight: int, + height: int + ) -> None: + self.age = age + self.weight = weight + self.height = height class ChildrenSlideLimitationValidator(SlideLimitationValidator): - pass + age = IntegerRange(4, 14) + height = IntegerRange(80, 120) + weight = IntegerRange(20, 50) class AdultSlideLimitationValidator(SlideLimitationValidator): - pass + age = IntegerRange(14, 60) + height = IntegerRange(120, 220) + weight = IntegerRange(50, 120) class Slide: - pass + def __init__( + self, + name: str, + limitation_class: SlideLimitationValidator + ) -> None: + self.name = name + self.limitation_class = limitation_class + + def can_access(self, visitor: Visitor) -> bool: + try: + self.limitation_class( + visitor.age, + visitor.weight, + visitor.height + ) + return True + except (TypeError, ValueError): + return False From 09341d6d2af428446bcfa21f88a9cb5beaf62438 Mon Sep 17 00:00:00 2001 From: taraskhom Date: Fri, 20 Dec 2024 15:32:49 +0200 Subject: [PATCH 2/2] Fixed setter --- app/main.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/main.py b/app/main.py index 4e5bd537..817981a5 100644 --- a/app/main.py +++ b/app/main.py @@ -25,10 +25,9 @@ def __get__( def __set__(self, instance: object, value: int) -> None: if not isinstance(value, int): raise TypeError - if self.min_amount <= value <= self.max_amount: - setattr(instance, self.private_name, value) - else: + if not self.min_amount <= value <= self.max_amount: raise ValueError + setattr(instance, self.private_name, value) class Visitor: