On Thu, Mar 7, 2013 at 3:56 AM, Ben Sizer <kylo...@gmail.com> wrote: > On Wednesday, 6 March 2013 16:22:56 UTC, Chris Angelico wrote: >> >> Effectively, you would need to have a >> subclass of list/dict/tuple/whatever that can respond to the change. > > This is certainly something I'd be interested in having, but I guess that > would be fragile since the user would have the burden of having to remember > to use those types.
Since you're already overriding setattr, you could simply force all non-string sequences to your special subclass of list. That reduces that burden, though it'd break if there are any other references to the object. >> What's the goal of this class? Can you achieve the same thing by >> using, perhaps, a before-and-after snapshot of a JSON-encoded form of >> the object? >> > > I need to be able to perform complex operations on the object that may modify > several properties, and then gather the properties at the end as an efficient > way to see what has changed and to store those changes. Any comparison of > before-and-after snapshots could work in theory, but in practice it could be > expensive to produce the snapshots on larger objects and probably expensive > to calculate the differences that way too. Performance is important so I > would probably just go for an explicit function call to mark an attribute as > having been modified rather than trying to do a diff like that. (It wouldn't > work for rollbacks, but I can accept that.) Hmm. Interesting. The perfect solution probably is too messy, yeah. But if you have your subclassing done, you could possibly snapshot-on-write, which would allow the rollback. Not sure if it'd help though. ChrisA -- http://mail.python.org/mailman/listinfo/python-list