import numpy as np class Point: def __init__(self, x, y): self.x, self.y = x, y def __str__(self): return f'({self.x:g}, {self.y:g})' class PolarPoint(Point): def __init__(self, r, theta): self.r = r self.theta = theta super().__init__(r * np.cos(theta), r * np.sin(theta)) def __str__(self): return super().__str__() + f'({self.r:g}, {self.theta:g})' def test_PolarPoint(): """ r, theta = (1, pi/2) -> x,y = (0,1) """ tol = 1e-10 pp = PolarPoint(1, np.pi/2) max_error = max(abs(pp.r - 1), abs(pp.theta - np.pi/2), abs(pp.x), abs(pp.y -1)) assert max_error < tol test_PolarPoint() pp = PolarPoint(1.0, np.pi/4) print(pp)