# Classes

Fri Oct 31 22:40:45 CET 2014

On Fri, 31 Oct 2014 14:24:11 -0700 (PDT)
sohcahtoa82 at gmail.com wrote:

> On Friday, October 31, 2014 1:51:23 PM UTC-7, Chris Angelico wrote:
> > On Sat, Nov 1, 2014 at 4:43 AM, Rob Gaddi
> > <rgaddi at technologyhighland.invalid> wrote:
> > > Define a Square class, subclassed from Rectangle.  Use getters/setters
> > > to enforce that the length and width must be equal.  Confirm that
> > > length and width remain locked, and that perimeter() and area() work
> > > correctly.
> >
> > Here we go again...
> >
> > http://en.wikipedia.org/wiki/Circle-ellipse_problem
> >
> > Square and Rectangle are just as "obviously" the other way around in
> > the hierarchy, and it's wrong whichever way you do it. Not a good
> > example.
> >
> > ChrisA
>
> I've never heard of the Circle-Ellipse problem, and my first instinct to Rob's post was to ask, why would you want to sub-class Rectangle into a Square class?  A square is just a special case of a Rectangle.  Attempting that kind of sub-classing would just cause problems.  The only thing you gain is a slight optimization in calculating perimeter by turning two multiplications and an addition into a single multiplication which really wouldn't have an effect on performance unless you were doing that calculation millions of times per second.

As a practical tool?  Entirely and completely useless, no doubt
about it.  But it's easily understood as an example, even if the reason
that a Square is a subclass of Rectangle is "because I said so".

For this specific exercise, a Square is a subclass of Rectangle because
the point of Rectangle is to demonstrate that extraneous get/set
functions are completely unnecessary in Python.  The point of
Square is to demonstrate that get/set functions can be useful in
certain circumstances where you need to implement non-trivial behaviors,
such as making the "width" property into an alias for the "length" true
data member.

As a learning tool for thinking about inheritance hierarchies it's kind
of rubbish.  But then again, most inheritance hierarchies are ambigious
at best, which is why "has a" is often a better choice than "is a".

--
Rob Gaddi, Highland Technology -- www.highlandtechnology.com
Email address domain is currently out of order.  See above to fix.