On Jan 28, 10:17 pm, Peter Wang <misterw...@gmail.com> wrote: > On Jan 27, 3:16 pm,Reckoner<recko...@gmail.com> 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. > > Naturally, all of these items are related in some parent-child > > fashion. > > > that might be a lot to ask, however. > > > Any advice appreciated. > > You should really look at Enthought's Traits package. It does exactly > what you are asking for, and much, much more. See: > > http://code.enthought.com/projects/traits/documentation.phphttp://code.enthought.com/projects/traits/examples.php > > Using Traits, you could do the following: > > from enthought.traits.api import * > class Child(HasTraits): > state = Enum("happy", "sad", "bawling") > > class Parent(HasTraits): > child = Instance(Child) > > @on_trait_change('child.state') > def handler(self): > print "new child state:", self.child.state > > bob_jr = Child() > bob = Parent(child = bob_jr) > > bob_jr.state = "sad" > # This would result in bob.handler() being called > > (Disclosure: I work at Enthought and have been using Traits heavily > for the last 4+ years.) > > -Peter
I haven't looked at Enthought in awhile. I want to avoid having to installing the entire Enthought toolsuite, however. Would I have to do that for Traits? Thanks again. -- http://mail.python.org/mailman/listinfo/python-list