Contributed by Chris Rathman
class Shape: # constructor def __init__(self, initx, inity): self.moveTo(initx, inity) # accessors for x & y def getX(self): return self.x def getY(self): return self.y def setX(self, newx): self.x = newx def setY(self, newy): self.y = newy # move the shape position def moveTo(self, newx, newy): self.setX(newx) self.setY(newy) def rMoveTo(self, deltax, deltay): self.moveTo(self.getX() + deltax, self.getY() + deltay) # abstract draw method def draw(self): pass |
from modShape import Shape class Rectangle(Shape): # constructor def __init__(self, initx, inity, initwidth, initheight): Shape.__init__(self, initx, inity) self.setWidth(initwidth) self.setHeight(initheight) # accessors for width & height def getWidth(self): return self.width def getHeight(self): return self.height def setWidth(self, newwidth): self.width = newwidth def setHeight(self, newheight): self.height = newheight # draw the rectangle def draw(self): print "Drawing a Rectangle at:(%d,%d), radius %d, width %d" % \ (self.getX(), self.getY(), self.getWidth(), self.getHeight()) |
from modShape import Shape class Circle(Shape): # constructor def __init__(self, initx, inity, initradius): Shape.__init__(self, initx, inity) self.setRadius(initradius) # accessors for the radius def getRadius(self): return self.radius def setRadius(self, newradius): self.radius = newradius # draw the circle def draw(self): print "Drawing a Circle at:(%d,%d), radius %d" % \ (self.getX(), self.getY(), self.getRadius()) |
from modShape import Shape from modRectangle import Rectangle from modCircle import Circle def tryMe(): # set up lists to hold the shapes scribble = [Rectangle(10, 20, 5, 6), Circle(15, 25, 8)] # iterate through the lists and handle shapes polymorphically for each in scribble: each.draw() each.rMoveTo(100, 100) each.draw() # call a rectangle specific instance arec = Rectangle(0, 0, 15, 15) arec.setWidth(30) arec.draw() tryMe() |
Drawing a Rectangle at:(10,20), radius 5, width 6 Drawing a Rectangle at:(110,120), radius 5, width 6 Drawing a Circle at:(15,25), radius 8 Drawing a Circle at:(115,125), radius 8 Drawing a Rectangle at:(0,0), radius 30, width 15 |