From d4b0139a67e97f5f1b9a1c649d7603da69069e56 Mon Sep 17 00:00:00 2001 From: Olena Lisova Date: Tue, 10 Oct 2023 15:40:23 -0400 Subject: [PATCH 1/2] I don't know what type to write owner, obj, objtype --- app/main.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/app/main.py b/app/main.py index 6d375672..aeb4433c 100644 --- a/app/main.py +++ b/app/main.py @@ -2,24 +2,70 @@ class IntegerRange: - pass + def __init__(self, min_amount: int, max_amount: int) -> None: + self.min_amount = min_amount + self.max_amount = max_amount + + def __set_name__(self, owner, name: str) -> None: + self.public_name = name + self.protected_name = "_" + name + + def __get__(self, obj, objtype=None) -> int: + value = getattr(obj, self.protected_name) + print(f"Accessing {self.public_name} giving {value}") + return value + + def __set__(self, obj, value: int) -> bool: + if value < self.min_amount or value > self.max_amount: + raise ValueError("Not acces") + setattr(obj, self.protected_name, value) 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) + weight = IntegerRange(20, 50) + height = IntegerRange(80, 120) + + def __init__(self, age: int, weight: int, height: int) -> None: + super().__init__(age, weight, height) class AdultSlideLimitationValidator(SlideLimitationValidator): - pass + age = IntegerRange(14, 60) + weight = IntegerRange(50, 120) + height = IntegerRange(120, 220) + + def __init__(self, age: int, weight: int, height: int) -> None: + super().__init__(age, weight, height) 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) + except ValueError: + return False + + return True From 667a3b6fd53bd932da2f289d52019898dea1b6da Mon Sep 17 00:00:00 2001 From: Olena Lisova Date: Tue, 10 Oct 2023 15:40:23 -0400 Subject: [PATCH 2/2] I don't know what type to write owner, obj, objtype --- app/main.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/app/main.py b/app/main.py index 6d375672..2eef7527 100644 --- a/app/main.py +++ b/app/main.py @@ -1,25 +1,72 @@ from abc import ABC +from typing import Any class IntegerRange: - pass + def __init__(self, min_amount: int, max_amount: int) -> None: + self.min_amount = min_amount + self.max_amount = max_amount + + def __set_name__(self, owner: Any, name: str) -> None: + self.public_name = name + self.protected_name = "_" + name + + def __get__(self, obj: Any, objtype: None = None) -> int: + value = getattr(obj, self.protected_name) + print(f"Accessing {self.public_name} giving {value}") + return value + + def __set__(self, obj: Any, value: int) -> None: + if value < self.min_amount or value > self.max_amount: + raise ValueError("Not acces") + setattr(obj, self.protected_name, value) 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) + weight = IntegerRange(20, 50) + height = IntegerRange(80, 120) + + def __init__(self, age: int, weight: int, height: int) -> None: + super().__init__(age, weight, height) class AdultSlideLimitationValidator(SlideLimitationValidator): - pass + age = IntegerRange(14, 60) + weight = IntegerRange(50, 120) + height = IntegerRange(120, 220) + + def __init__(self, age: int, weight: int, height: int) -> None: + super().__init__(age, weight, height) 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) + except ValueError: + return False + + return True