What is proper way to require a method to be overridden?

Carroll, Barry 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).
> >
> Well...
> 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 ?
> Fuzzyman
> http://www.voidspace.org.uk/python/articles.shtml
> --
> http://mail.python.org/mailman/listinfo/python-list


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 mailing list