On Fri, 2007-04-13 at 14:08 -0500, Carl K wrote: > Is there a more elegant way of coding this: > > x=o.p # save .p > o.p=0 > o.m() > o.p=x # restore .p
In Python 2.5, you could leverage the new "with" statement with a properly crafted context manager along these lines: """ from __future__ import with_statement class TempAttrSetter(object): def __init__(self, obj, **attrs): self.obj = obj self.attrs = attrs def __enter__(self): self.saved_attrs = {} for attr, newval in self.attrs.iteritems(): self.saved_attrs[attr] = getattr(self.obj, attr) setattr(self.obj, attr, newval) def __exit__(self, *args): for attr in self.saved_attrs.keys(): setattr(self.obj, attr, self.saved_attrs[attr]) class Bag(object): pass b = Bag() b.x = 1 print b.x # prints 1 with TempAttrSetter(b, x=3): print b.x # prints 3 print b.x # prints 1 """ -Carsten -- http://mail.python.org/mailman/listinfo/python-list