Hacker News new | past | comments | ask | show | jobs | submit login

The line where the original attributes are backed up needs to be a deep copy (otherwise the updates will affect the backed up dictionary):

self.orig = self.obj.__dict__

Should be more like:

self.orig = self.obj.__dict__.copy()

Agreed. I did the following:

    def __enter__(self):
        self.original = dict(self.obj.__dict__)
        return self

    def __exit__(self, typ, val, traceback):
        self.obj.__dict__ = self.original
This doesn't perform a deep copy, but prevents modifications on self.obj.__dict__ from modifying self.original also.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact