On Aug 8, 10:43 pm, faulkner <[EMAIL PROTECTED]> wrote: > On Aug 8, 12:45 am, kj7ny <[EMAIL PROTECTED]> wrote: > > > Is there a way that I can programmatically find the name of a method I > > have created from within that method? I would like to be able to log > > a message from within that method (def) and I would like to include > > the name of the method from which it was written without having to > > hard-code that value in every message string. While we're at it, is > > there a way to programmatically get the name of the class and the > > module while I'm at it? > > > Thanks, > > def foo(): > print sys._getframe(0).f_code.co_name > > most of the darkest magic of python is in the frames returned by > sys._getframe.
sorry for the double-post. i forgot to answer the rest of the question. class a: def b(self, *a): print sys._getframe(0).f_code.co_name print self.__class__.__name__ print getattr(self, sys._getframe(0).f_code.co_name).im_class.__name__ print self.__class__.__module__ def log(f): def newf(*a, **kw): if a and f.func_code.co_varnames[0] == 'self': print '%s.%s.%s %r %r' % (a[0].__class__.__module__, a[0].__class__.__name__, f.func_name, a, kw) else: print '%s.%s %r %r' % (f.func_globals['__name__'], f.func_name, a, kw) f(*a, **kw) newf.__name__ = f.__name__ newf.__doc__ = f.__doc__ return newf you can find more interesting attributes of frame and function objects using the builtin dir function. -- http://mail.python.org/mailman/listinfo/python-list