ben wrote:
Ok, thanks for the info.

What would be a better way to do this?  What I'm trying to do is treat
things in a reasonable OOP manner (all fairly new to me, esp. in
Python).  Here's a made-up example with a little more context.  Let's
say you're making a drawing program that can draw various shapes.  So
in the interest of not repeating oneself, I want a class Shape that
handles everything that shapes have, such as a color, and a location.
Then I can subclass Shape to create Square, which has code specific to
drawing a square (e.g. 4 equal sides).  So, like this:

class Shape:

    x = 0
    y = 0

    def setColor(self,color):
        self.color = color

    def setLocation(self,x,y):
        self.x = x
        self.y = y

    def getLocation(self):
        return [self.x,self.y]

class Square(Shape):

    size = 0

    def __init__(self,size):
        self.size = size

    def draw(self):
        location = getLocation()
        # code to draw shape from location[0],location[1] at size size
        # etc...

It seems to me that you would want the location code handled in the
Shape class so that I'm not rewriting it for Circle, Triangle, etc.,
but I'm not allowed to call any of those methods from the subclass.  I
must be thinking of this in the wrong way.  Help?

thanks!




Hi Ben,

Please do not top post.
You already been given good advices, especially the one suggesting to go through the tutorial. You're making basic mistakes here.

Here is a very simple version of your code.

class Shape:

   def __init__(self, x=0, y=0):
       self.x = 0
       self.y = 0
       self.color = None

   def draw(self):
       print 'drawing %s' % self


class Square(Shape):

   def __init__(self,size):
       self.size = size

   def draw(self):
       Shape.draw(self) # this is one way to call the base class method
       location = (self.x, self.y)
       # code to draw shape from self.x, self.y at size self.size
       # etc...


mySquare = Square(5,2)
mySquare.color = 'red'
print mySquare.x
>>> 5

Since your attributes are flagged as public, you don't really need setters & getters.


JM
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to