Instrumenting a class to see how it is used

Michele Simionato michele.simionato at gmail.com
Thu May 10 12:08:33 EDT 2012


This may get you started (warning: not really tested).
$ echo instr.py
from warnings import warn
oget = object.__getattribute__
tget = type.__getattribute__
class Instr(object):
 class __metaclass__(type): 
 def __getattribute__(cls, name):
 clsname = tget(cls, '__name__')
 warn('accessing %s.%s' % (clsname, name), stacklevel=2)
 return tget(cls, name)
 def __getattribute__(self, name):
 warn('accessing %s.%s' % (self, name), stacklevel=2)
 return oget(self, name)
Then change the base classes of the class you want to instrument, i.e.
class MyClass(MyBase) -> class MyClass(MyBase, Instr)
and see what happens. It should work in simple cases.
It will log a lot, so will have to adapt this.


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /