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