Skip to content

Commit

Permalink
Solution1
Browse files Browse the repository at this point in the history
  • Loading branch information
Maxim-Khrypunov committed Oct 26, 2024
1 parent 29b90b6 commit 4d13c94
Showing 1 changed file with 63 additions and 6 deletions.
69 changes: 63 additions & 6 deletions app/main.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,82 @@
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) -> Any:
self.protected_name = "_" + name

def __get__(self, instance: Any, value: Any) -> int:
return getattr(instance, self.protected_name)

def __set__(self, instance: Any, value: Any) -> None:
if not isinstance(value, int):
raise TypeError("Grade should be integer")
if self.min_amount > value or value > self.max_amount:
raise ValueError("Grade should not be less than "
"2 and greater than 12")
setattr(instance, 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)
height = IntegerRange(80, 120)
weight = IntegerRange(20, 50)

def __init__(self, age: int, weight: int, height: int) -> None:
super().__init__(age, weight, height)


class AdultSlideLimitationValidator(SlideLimitationValidator):
pass
age = IntegerRange(14, 60)
height = IntegerRange(120, 220)
weight = IntegerRange(50, 120)

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:
ChildrenSlideLimitationValidator
or AdultSlideLimitationValidator) -> 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

0 comments on commit 4d13c94

Please sign in to comment.