detecting modifications to an instance? (for debugging)
do-not-spam-ben.hutchings at businesswebsoftware.com
Wed Apr 9 15:38:06 CEST 2003
In article <ef08387c.0304082116.e658c31 at posting.google.com>,
> I have a big chunk of Python code and I'd like to detect any run-time
> modification to instances of a particular class.
> I'd like to know how to do it with a minimal addition of code, i.e.,
> it's much preferrable to make the code report any such instances
> instead of using a third-party debugging tool for it.
> Note I just want to detect the modification, not to prevent them
> (which I think is impossible in Python).
It is possible to prevent it.
> Any suggestion is extremely welcome!
Here's how to detect it:
def __setattr__(self, name, value):
self.__dict__[name] = value
print ('in %s instance 0x%x, set %s=%s'
% (self.__class__.__name__, id(self), name, repr(value)))
def __delattr__(self, name):
print ('in %s instance 0x%x, deleted %s'
% (self.__class__.__name__, id(self), name)
This assumes your class doesn't use __slots__ and doesn't have a
super-class that defines __setattr__ or __delattr__. If either of
those is true then you should call the super-class implementation
instead of manipulating self.__dict__.
If you want to prevent modifications, you can raise an exception in
those methods, but be aware that these methods will be called even
when you set attributes in __init__, so you would need to manipulate
More information about the Python-list