import math class Point: __x__ = 0.0 __y__ = 0.0 def __init__(self, x = 0.0, y = 0.0): self.__x__ = x self.__y__ = y def __str__(self): return f"({self.__x__:.3f},{self.__y__:.3f})" def __neg__(self): return Point(-self.__x__, -self.__y__) def __add__(self, other): x = 0.0 y = 0.0 if isinstance(other, Point): return Point(self.__x__ + other.__x__, self.__y__ + other.__y__) elif isinstance(other, int) or isinstance(other, float): return Point(self.__x__ + other, self.__y__ + other) else: raise ValueError("Operand must be Point, int or float.") def __radd__(self, other): return self + other def __sub__(self, other): if isinstance(other, Point) or isinstance(other, int) or isinstance(other, float): return self + (-other) else: raise ValueError("Operand must be Point, int or float.") def __rsub__(self, other): return self - other def __mul__(self, other): if isinstance(other, Point): return Point(self.__x__ * other.__x__, self.__x__ * other.__y__) elif isinstance(other, int) or isinstance(other, float): return Point(self.__x__ * other, self.__x__ * other) else: raise ValueError("Operand must be Point, int or float.") def __rmul__(self, other): return self * other def rot(self, degree): x = math.cos(degree) * self.__x__ + math.sin(degree) * self.__y__ y = -math.sin(degree) * self.__x__ + math.cos(degree) * self.__y__ return Point(x, y) def get_x(self): return self.__x__ def get_y(self): return self.__y__ p1 = Point() p2 = Point(1, 1) print(p2.rot(math.pi * 2))