[IronPython] OnVarChanged
Michael Foord
fuzzyman at voidspace.org.uk
Tue Jun 20 18:59:11 CEST 2006
John Mancine wrote:
> I realize this is likely woefully naïve but I thought I'd ask anyhow.
>
> I have a very specific case in my project where I would really like to know
> when a variable inside IronPython changes. Basically when I do this:
>
> pythonEngine.Execute("a = 3"); // Or something more complex that ends up
> changing global var 'a'
>
> I am looking for a way to be notified when 'a' has been assigned to a new
> value. This seems to be pretty simple for the Set/GetGlobal() calls but what
> about code that is inside of the Execute() block? Where could I look at
> adding some code myself such that I can add these hooks? I have dug through
> some of the code to find a place to add a hook but I couldn't seem to find
> anything clear cut.
>
> Again, I realize this is pretty simplistic and also painfully slow for any
> moderate scripting but I have a very specific case where I would like some
> widgets in C# to respond to when a variable has changed. (The watchwindow in
> visual studio would be a good parallel of what I'm needing to do -- ie. show
> a new value has been set for a particular value you are watching).
>
>
Hello John,
I may be off beam here (I'm no C# expert and know little about the
IronPython internals) but it sounds like what you want to do is a bit at
conflict with the way Python works.
Python doesn't have variables by value as such, it has names and objects.
In your example, 'a' isn't an object, it's a name bound to an object.
When you do :
a = 1
a = 2
it's not that the value of a changes, instead the name is rebound to a
different object. Tracking changes to a mutable object is one thing, but
tracking name binding is a different thing altogether.
Perhaps you could replace the ``__dict__`` attribute of a module (where
names are stored) with a custom 'dictionary-like' object, that calls a
callback when assignments are made ? A better approach would be to use a
value on an object (instead of a local variable), and you can get that
object to perform a callback when changes are made.
All the best,
Fuzzyman
http://www.voidspace.org.uk/python/index.shtml
> Thanks!
> John
>
> _______________________________________________
> users mailing list
> users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
More information about the Ironpython-users
mailing list