@contextmanager def restoring(obj, attr): old_val = getattr(obj, attr) yield setattr(obj, attr, old_val) x.a = 1 with restoring(x, "a"): print x.a x.a = 2 print x.a print x.a