# Classes

Denis McMahon denismfmcmahon at gmail.com
Sun Nov 2 10:50:37 CET 2014

```On Sat, 01 Nov 2014 12:42:10 -0400, Seymore4Head wrote:

> OK  Maybe I misunderstood the question.
>
> My answer to you then is ......I don't know.  I will have to think about
> it some more.

The question (I thought) was to write a class for Square that inherited a
class Rectangle but imposed on it the additional constraints of a square
over a rectangle, namely that length == width.

To do this, you need to override the inherited methods to set length and
width with new methods to set length and width as follows:

when setting length, also set width equal to length.
when setting width, also set length equal to width.

For bonus points, if your constructor accepts width and length parameters
(from the Rectangle constructor) then detect if they are different and
raise a suitable error.

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.

--
Denis McMahon, denismfmcmahon at gmail.com

```