Patrick Down wrote:
> jeremito wrote:
> > I am writing a class that is intended to be subclassed.  What is the
> > proper way to indicate that a sub class must override a method?
> >
> > Thanks,
> > Jeremy
>
> Decorators to the rescue?
>
> def must_override(f):
>     def t(*args):
>         raise NotImplementedError("You must override " + f.__name__)
>     return t
>
> class Foo:
>     @must_override
>     def Bar(x,y): pass
>
> Foo().Bar()
>
> Traceback (most recent call last):
>   File "testit.py", line 14, in ?
>     Foo().Bar()
>   File "testit.py", line 5, in t
>     raise NotImplementedError("You must override " + f.__name__)
> NotImplementedError: You must override Bar

I'd think twice before using a decorator.  This just seems less clear
to read than simply raising NotImplementedError, and the traceback
points into the decorator instead of the function that you really care
about.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to