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