On Sat, Nov 1, 2014 at 8:24 AM, <sohcahto...@gmail.com> wrote: > 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. >
Yep. A square is indeed a special case of rectangle (and a circle is a special case of ellipse), so it would make sense to have an "is_square()" method (or isSquare or squarep or whatever you want to call it). The hairiness of subclassing either to make the other means it's an unideal example. In fact, I would say the Python @property decorator is less well suited to an inheritance situation than to a chronological change. "This used to be a simple attribute, now it has validation/formatting/logging/whatever." But it's hard to come up with an example to illustrate this cleanly for a student. Personally, I'd be inclined to skip properties altogether; learn about them later, much later, and only if you actually need them. ChrisA -- https://mail.python.org/mailman/listinfo/python-list