En Mon, 16 Jul 2007 03:56:18 -0300, Erik Jones <[EMAIL PROTECTED]> escribió:
> Perhaps an even better example of what I'm trying to do would be in > order (this is minus any exception handling): > > import sys > > def mytrace(frame, event, arg): > if event == 'call': > func_name = frame.f_code.co_name > > if func_name in frame.f_locals['self'].__class__.__dict__: > print frame.f_locals['self'].__class__.__name__ > else: > for base in frame.f_locals['self'].__class__.__bases__: > if func_name in base.__dict__: > print base.__name__ > break > > > class A(object): > def __init__(self): > pass > > class B(A): > def __init__(self): > A.__init__(self) > > sys.settrace(mytrace) > B() > > This will output: > > B > B If you don't mind post-processing the results, you can log the function name and source module (from frame.f_code.co_name and co_filename) and current line number (frame.f_lineno). Later, obtaining the class name from those is a bit tricky (and not even the inspect module does it right), but perhaps using the tokenizer module, watching for lines that contain "class" <name> is enough. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list