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.
--
http://mail.python.org/mailman/listinfo/python-list