class Shape: def area(self): pass class Square(Shape): def __init__(self, top_left, side): self.__top_left = top_left self.__side = side def area(self): return self.__side * self.__side class Rectangle(Shape): def __init__(self, top_left, height, width): self.__top_left = top_left self.__height = height self.__width = width def area(self): return self.__height * self.__width class Circle(Shape): def __init__(self, center, radius): self.__center = center self.__radius = radius def area(self): PI = 3.141592653589793 return PI * self.__radius**2 class Geometry: def area(self, shape): if isinstance(shape, Square): return shape.side * shape.side if isinstance(shape, Rectangle): return shape.height * shape.width if isinstance(shape, Circle): raise NoSuchShapeException()