safely rename a method with a decorator

R. David Murray rdmurray at bitdance.com
Sun Mar 22 21:15:51 EDT 2009


Daniel Fetchinson <fetchinson at googlemail.com> wrote:
> >> I'd like to implement a decorator that would rename the method which
> >> it decorates. Since it's a tricky thing in general involving all sorts
> >> of __magic__ I thought I would ask around first before writing
> >> something buggy :)
> >>
> >> It should work something like this:
> >>
> >> class myclass( object ):
> >>     @rename( 'hello' )
> >>     def method( self ):
> >>         print 'ok'
> >>
> >> # tests
> >>
> >> inst = myclass( )
> >> inst.method( )       # raise an AttributeError
> >> inst.hello( )           # prints 'ok'
> >> myclass.method   # raise an AttributeError
> >> myclass.hello       # prints <unbound method myclass.hello>
> >> assert 'method' in dir( myclass ) is False
> >> assert 'hello' in dir( myclass ) is True
> >>
> >> Any ideas?
> >>
> > What is your use case? Why don't you just give the method the right name
> > in the first place? :-)
> 
> The use case is that I'm writing a turbogears application in which the
> URLs are determined by the method names. People might want to change
> these names if they want to change the URLs. One way would be to put
> the method names into a turbogears configuration file and the @rename
> decorator could fetch it from there.

Use a WSGI routing engine instead.

--
R. David Murray           http://www.bitdance.com




More information about the Python-list mailing list