Bruno Desthuilliers wrote: > Joel Andres Granados a écrit : > >> Hi list: >> >> I have googled quite a bit on this matter and I can't seem to find what >> I need (I think Im just looking where I'm not suppose to :). I'm >> working with code that is not of my authorship and there is a class >> attribute that is changes by directly referencing it (object.attr = >> value) instead of using a getter/setter (object.setAttr(Value) ) >> > > Which is the right thing to do in Python (I mean : *not* using > Java-style getters/setters). > > >> function. The thing is that I have no idea when the change occurs and I >> would REALLY like to find out. >> So here comes my question ..... >> Is there a function construct inside a python class that is >> automatically called when an attr is changed???? >> > > yes : object.__setattr__(self, name, value) > > # example: > class Class(object): > def __init__(); > self.attr = "whatever" > > def __setattr__(self, name, value): > object.__setattr__(self, name, value) > if name == 'attr': > print "It has changed" > # you can also print the call frame, > # or set a 'hard' breakpoint here... > > obj = Class() > obj.attr = "other whatever" > > *Output:* > It has changed > >
I used this ^^^^^^^^^^^^^^^ one. Thank for the help. Works like a charm. Regards > Or you might turn attr into a property: > > class Class(object): > def __init__(); > self.attr = "whatever" > > @apply > def attr(): > def fset(self, value): > self._attr = value > print "It has changed" > def fget(self): > return self._attr > return property(**locals()) > > But unless you have other needs than simple tracing/debugging, it's > probably overkill. > > HTH > -- http://mail.python.org/mailman/listinfo/python-list