the name of a method

Jason Scheirer jason.scheirer at gmail.com
Thu Jan 15 17:56:11 CET 2009


On Jan 15, 8:37 am, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
> thomas.steffe... at googlemail.com wrote:
> > Hello,
>
> > I have a Class:
>
> > class myClass:
> >     def __init__(self):
> >         # do something
> >         print "name of class = " +  self.__class__.__name__
>
> >     def myMethod(self):
> >         # do something
> >         print "name of method = " + "myMethod"
> >         return
>
> >     ...
>
> > I print the name of the class with self.__class__.__name__ in
> > __init__.
> > I want to print also in every method of myClass the name of the
> > method.
> > How can I get the name? I would not like to write e.g. "myMethod". Is
> > there a variable like self.__class__.__name__ for this?
> > Thanks for your hints, Thomas
>
> This can be done by inspecting the stackframes. Look into the module
> inspect. This has also been discussed very often on this list, stackframe &
> inspect should be good searchterms.
>
> However, if what you are after is logging, you should take a look into the
> logging module. it has many advantages over simple print-statements, and
> amongst other things allows you to print out the enclosing callable name
> when invoked ala
>
> logger.debug("Some message.")
>
> I strongly recommend using that. And at least you can of course peek into
> the logging module's source to see how the extract that information.
>
> Diez

I agree, this should not be done. However, sometimes it's useful to
see the parameter values:

import inspect
import logging
import sys
def log_fn():
	logging.debug("%s%s" % (
            sys._getframe().f_back.f_code.co_name,
            inspect.formatargvalues(*inspect.getargvalues(sys._getframe
().f_back))))

logging.getLogger().setLevel(0)
def hello_there(x, y, z, *a):
     log_fn()
     return 1+x

>>> hello_there(1, 'a', 'b', 5, 6, 7, 8, 9)
DEBUG:root:hello_there(x=1, y='a', z='b', *a=(5, 6, 7, 8, 9))

It can be done, but usually you want to actually trace through with
the debugger.



More information about the Python-list mailing list