Differences creating tuples and collections.namedtuples
Roy Smith
roy at panix.com
Wed Feb 20 09:09:08 EST 2013
In article <mailman.2087.1361343028.2939.python-list at python.org>,
Chris Angelico <rosuav at gmail.com> wrote:
> On Wed, Feb 20, 2013 at 2:38 PM, Terry Reedy <tjreedy at udel.edu> wrote:
> > Liskov Substitution Principle (LSP): I met this over 15 years ago reading
> > debates among OOP enthusiasts about whether Rectangle should be a subclass
> > of Square or Square a subclass of Rectangle, and similarly, whether Ostrich
> > can be a legitimate subclass of Bird.
> >
> > The problem I see with the LSP for modeling either abstract or concrete
> > entities is that we in fact do define subclasses by subtraction or
> > limitation, as well as by augmentation, while the LSP only allows the
> > latter.
>
> A plausible compromise is to demand LSP in terms of programming, but
> not necessarily functionality. So an Ostrich would have a fly() method
> that returns some kind of failure, in the same way that any instance
> of any flying-bird could have injury or exhaustion that prevents it
> from flying. It still makes sense to attempt to fly - an ostrich IS a
> bird - but it just won't succeed.
>
> ChrisA
I would think Ostrich.fly() should raise NotImplementedError. Whether
this violates LSP or not, depends on how you define Bird.
class Bird:
def fly(self):
"""Commence aviation.
Note: not all birds can fly. Calling fly() on
a flightless bird will raise NotImplementedError.
"""
class Ostrich(Bird):
def fly(self):
raise NotImplementedError("ostriches can't fly")
class Sheep(Bird):
def fly(self):
self.plummet()
More information about the Python-list
mailing list