On Tue, 27 Jan 2009, Reckoner wrote: > I'm not sure this is possible, but I would like to have > a list of objects > > A=[a,b,c,d,...,z] > > where, in the midst of a lot of processing I might do something like, > > A[0].do_something_which_changes_the_properties() > > which alter the properties of the object 'a'. > > The trick is that I would like A to be mysteriously aware that > something about the object 'a' has changed so that when I revisit A, > I will know that the other items in the list need to be refreshed to > reflect the changes in A as a result of changing 'a'. > > Even better would be to automatically percolate the subsequent changes > that resulted from altering 'a' for the rest of the items in the list. [...]
Interesting question. Maybe this is too simple for your purpose (or maybe just wrong!), but could you subclass list and give it an "update" method which keeps a dictionary of the state of its members and/or calls another method that makes the appropriate changes in the other members when a change occurs, something like: class SelfAwareList(list): state_dict = {} def update(self): for i in self: if i.state == 'some_condition': self.do_stuff_to_other_members() self.state_dict[i] = i.state def do_stuff_to_other_members(self): print 'doing stuff...' ? You could manually call update() on the SelfAwareList instance after calling a method on a SelfAwareList member, or even build it into the members' methods so that it was automatic. HTH, John -- http://mail.python.org/mailman/listinfo/python-list