How to do a Decorator Here?
Matimus
mccredie at gmail.com
Tue Feb 20 19:00:56 EST 2007
On Feb 20, 12:20 pm, "Gregory Piñero" <gregpin... at gmail.com> wrote:
> Need some decorator help.
>
> I have a class. And I want to add behavior to one of this class's
> methods to be run before the class runs the actual method. Is this
> what decorators are for?
>
> So the class I want to work with is string.Template
>
> Let's say I have this:
> from string import Template
> a=Template("$var1 is a test")
>
> def preprocess(var1):
> #Real code here will be more complicated, just an example
> var1=var1.upper()
>
> a.substitute(var1="greg")
>
> So how can I have preprocess run before substitute is run? I want the
> user to be able to call a.substitute and have preprocess run
> automatically.
>
> Or is this not what decorators do? I'm trying to avoid subclassing if I can.
>
> Thanks in advance for the help.
>
> -Greg
You could just overload Template and put your own version of
substitute in there. I'm not sure a decorator is appropriate in this
case. Here is an overloading example:
[code]
from string import Template
# this assumes you are only interested in keyword arguments
# the form substitute(map) will not work
class MyTemplate(Template):
def substitute(self,**kwargs):
for k,v in kwargs.iteritems():
kwargs[k] = v.upper()
return super(MyTemplate,self).substitute(self,**kwargs)
if __name__ == "__main__":
a = MyTemplate("$var1 is a test")
print a.substitute(var1 = "greg")
[/code]
More information about the Python-list
mailing list