On 11/02/2014 01:50 AM, Denis McMahon wrote:
[snip]
from math import sqrt
class SquareGeometryError(Exception):
"""The parameters create an illegal geometry for a square"""
pass
class Rectangle:
def __init__(self,length,width):
self.length=length
self.width=width
def area(self):
return self.length*self.width
def perimeter(self):
return 2*self.length+2*self.width
def diagonal(self):
return sqrt(self.length*self.length+self.width*self.width)
def get_width(self):
return self.width
def get_length(self):
return self.length
def set_width(self, width):
self.width = width
def set_length(self, length):
self.length = length
class Square(Rectangle):
_def _init__(self, length, width):
if not length == width:
raise SquareGeometryError("Length must equal width")
self.length = length # or width
self.width = length # or width
def set_width(self, width):
self.length = width
self.width = width
def set_length(self, length):
self.length = length
self.width = length
Note that to make my square, I only need to over-ride those rectangle
methods which allow the setting of length and width to enforce squareness
upon the square. All the other methods of rectangle will work equally
well for the square.
Why do you want to instantiate a Square with two parameters? You only need one -- side. I
agree that since you are inheriting from Rectangle you need to keep the length and width
attributes to allow the get/set of length/width, so you do need to override the Rectangle set
methods. Consider this version:
# ------ <code> ---------
class Square(Rectangle):
def __init__(self, side):
self.set_side(side)
def get_side(self):
return self.length # or width
def set_side(self, side):
self.length = self.width = side
def set_width(self, width):
self.set_side(width)
def set_length(self, length):
self.set_side(length)
# ------ </code> --------
This also eliminates the need for your exception. Of course, it still allows someone to
directly change either the length or width -- but since "we are all consenting adults here",
anyone who does this should know the consequences. ;-)
-=- Larry -=-
--
https://mail.python.org/mailman/listinfo/python-list