import math
class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def move(self,x,y):
        self.x += x
        self.y += y
    def __str__(self):
        return "<"+ str(self.x) + "," + str(self.y) + ">"
class Shape:        
    def __init__(self, centrePoint, colour, width, height):
        self.centrePoint = centrePoint
        self.colour = colour
        self.width = width
        self.height = height
        self.type = "Square"
    def __init__(self, centrePoint, radius, colour):
        self.type = "Circle"
        self.radius = radius
        self.colour = colour
        self.centrePoint = centrePoint
    def move(self,x,y):
        self.centrePoint.move(x,y)
    def getArea(self):
        if (self.type == "Square"):
            return self.width * self.height
        elif (self.type == "Circle"):
            return math.pi*(self.radius**2)
    def __str__(self):
        return "Center Point: " + str(self.centrePoint) + "\nColour: "+ self.Colour + "\nType: " + self.type + "\nArea: " + self.getArea()
class Rectangle (Shape):
    def scale(self, factor):
        self.scaleVertically(factor)
        self.scaleHorizontally(factor)
    def scaleVertically(self, factor):
        self.height *= factor
    def scaleHorizontally(self, factor):
        self.width *= factor
class Circle (Shape):
    def scale(self, factor):
        self.radius * factor
That is the code I have so far, Shape is supposed to represent an abstract class and the other two classes are supposed to be inheriting from it, to me it still looks too hard coded to be a abstract solution, how could I improve?
 
     
     
     
    