attribute save restore
Carsten Haese
carsten at uniqsys.com
Fri Apr 13 15:41:34 EDT 2007
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
More information about the Python-list
mailing list