class RadiusVector2D:
    MIN_COORD = -100
    MAX_COORD = 1024

    def __init__(self, x=0, y=0):
        self.__x, self.__y = 0, 0
        self.x, self.y = x, y

    def check_value(func):
        def check(cls, value) -> bool:
            return (
                isinstance(value, (int, float))
                and cls.MIN_COORD <= value <= cls.MAX_COORD
            )

        def decorator(func):
            def wrapper(self, value):
                if check(self.__class__, value):
                    return func(self, value)

            return wrapper

        return decorator(func)

    @property
    def x(self):
        return self.__x

    @x.setter
    @check_value
    def x(self, value):
        self.__x = value

    @property
    def y(self):
        return self.__y

    @y.setter
    @check_value
    def y(self, value):
        self.__y = value

    def norm2(self):
        return self.x**2 + self.y**2


r1 = RadiusVector2D()
r2 = RadiusVector2D(1)
r3 = RadiusVector2D(4, 5)

assert hasattr(RadiusVector2D, "MIN_COORD") and hasattr(
    RadiusVector2D, "MAX_COORD"
), "в классе RadiusVector2D должны присутствовать атрибуты MIN_COORD и MAX_COORD"
assert (
    type(RadiusVector2D.x) == property and type(RadiusVector2D.y) == property
), "в классе RadiusVector2D должны присутствовать объекты-свойства x и y"
assert (
    r1.x == 0 and r1.y == 0 and r2.x == 1 and r2.y == 0 and r3.x == 4 and r3.y == 5
), "свойства x и y возвращают неверные значения"
assert RadiusVector2D.norm2(r3) == 41, "неверно вычисляется норма вектора"
r4 = RadiusVector2D(4.5, 5.5)
assert (
    4.4 < r4.x < 4.6 and 5.4 < r4.y < 5.6
), "свойства x и y возвращают неверные значения"
r5 = RadiusVector2D(-102, 2000)
assert (
    r5.x == 0 and r5.y == 0
), "присвоение значений, выходящих за диапазон [-100; 1024] не должно выполняться"
r = RadiusVector2D(10, 20)
r.x = "a"
r.y = (1, 2)
assert r.x == 10 and r.y == 20, "присвоение не числовых значений должно игнорироваться"