Attribute monitoring in a class
Joel Andres Granados
joel.granados at gmail.com
Wed Mar 14 09:01:54 EDT 2007
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
>
More information about the Python-list
mailing list