What is proper way to require a method to be overridden?
Barry.Carroll at psc.com
Sat Jan 6 01:22:11 CET 2007
> -----Original Message-----
> From: python-list-bounces+barry.carroll=psc.com at python.org
> list-bounces+barry.carroll=psc.com at python.org] On Behalf Of Fuzzyman
> Sent: Friday, January 05, 2007 4:05 PM
> To: python-list at python.org
> Subject: Re: What is proper way to require a method to be overridden?
> Carl Banks wrote:
> > jeremito wrote:
> > > I am writing a class that is intended to be subclassed. What is
> > > proper way to indicate that a sub class must override a method?
> > You can't (easily).
> How about not defining it on the base class, but check in the
> constructor that the attribute exists and that it is of type
> FunctionType ?
Thomas Christopher's book "Python Programming Patterns" has an example
of this that I like. On page 72 he shows code for a class, AbstractSet,
which he later subclasses in ListSet and DictSet. Each of the methods
intended for subclassing simply to raise a NotImplementedError, e.g.:
def insert(self,x): raise NotImplementedError, "set.insert"
In this way the superclass's interface is well defined (the methods and
their parameters are all listed, but if invoked before they are
overwritten, they abort with a useful error message. Pretty slick,
barry.carroll at psc.com
We who cut mere stones must always be envisioning cathedrals.
-Quarry worker's creed
More information about the Python-list