-
Notifications
You must be signed in to change notification settings - Fork 620
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Solution #282
base: master
Are you sure you want to change the base?
Solution #282
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,25 +1,65 @@ | ||
from __future__ import annotations | ||
from typing import Callable | ||
from abc import ABC | ||
|
||
|
||
class IntegerRange: | ||
pass | ||
def __init__(self, min_value: int, max_value: int) -> None: | ||
self.min_value = min_value | ||
self.max_value = max_value | ||
|
||
def __set_name__(self, owner: SlideLimitationValidator, name: str) -> None: | ||
self.protected_name = "_" + name | ||
|
||
def __get__(self, instance: Callable, objtype: None = None) -> bool: | ||
return getattr(instance, self.protected_name) | ||
|
||
def __set__(self, instance: Callable, value: int) -> None: | ||
if value in range(self.min_value, self.max_value + 1): | ||
setattr(instance, self.protected_name, True) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you need to set the value to the attribute, not True or False |
||
else: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe you can consider a different approach to solve this task. You can raise ValueError in case if the value is not valid, and in the def can_access method you can catch the error using try/except blocks. |
||
setattr(instance, self.protected_name, False) | ||
|
||
|
||
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) | ||
|
||
|
||
class AdultSlideLimitationValidator(SlideLimitationValidator): | ||
pass | ||
age = IntegerRange(14, 60) | ||
weight = IntegerRange(50, 120) | ||
height = IntegerRange(120, 220) | ||
|
||
|
||
class Slide: | ||
pass | ||
def __init__(self, name: str, limitation_class: Callable) -> None: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. specify the limitation_class typehint |
||
self.name = name | ||
self.limitation_class = limitation_class | ||
|
||
def can_access(self, visitor: Visitor) -> bool: | ||
lim = self.limitation_class( | ||
visitor.age, | ||
visitor.weight, | ||
visitor.height | ||
) | ||
print(lim.age, lim.weight, lim.height) | ||
if lim.age and lim.height and lim.weight: | ||
return True | ||
return False |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
invalid typehint