Return name of caller function?

Matthew Peter survivedsushi at yahoo.com
Wed Jun 27 16:44:57 EDT 2007


--- Jay Loden <python at jayloden.com> wrote:

> 
> Matthew Peter wrote:
> > For example, how do I get this to work?
> > 
> > def func():
> >     print "This is", __?__
> >     return __caller__
> > 
> > def echo():
> >     print "This is ", __?__
> >     return func()
> > 
> > 
> >>>> print echo()
> > This is echo
> > This is func
> > echo
> 
> This may not be what you're looking for but here's the solution I ended up with
> after some help from the list. It's designed for getting the name of an instance
> method, but in case it applies to your particular situation: 
> 
> #!/usr/bin/python
> 
> import functools
> 
> class TestClass:
>   def __init__(self):
>     pass
> 
>   def __getattr__(self, name):
>     try:
>       return getattr(self.__class__, name)
>     except AttributeError:
>       return functools.partial(self.foo, name)
> 
>   def foo(self, name, **args):
>     print "This is", name
> 
> test = TestClass()
> test.someMethod()
> test.anotherMethod()
> 
> Otherwise the inspect module may be the way to go, as Stephen already pointed out
> (though I must admit it seems a very inelegant route, especially compared to
> Python's usually clean and clear style). 
> 
> -Jay
> 


Thanks for the reply. 

The goal is to get it working outside of a class. Overloading the method with
getattr semi-works but it doesn't work in the larger context of what I am trying to
accomplish. 

You could avoid the exception block in your example:


>   def __getattr__(self, name):
>     try:
>       return getattr(self.__class__, name)
>     except AttributeError:
>       return functools.partial(self.foo, name)

to:

   def __getattr__(self, name, *args, **kw):
       return getattr(self.__class__, name, functools.partial(self.foo, name, *args,
**kw))
 
   def foo(self, name, *args, **kw):
     print "This is", name, args, kw
 

print test.squeaky("I need oil")





       
____________________________________________________________________________________
Looking for a deal? Find great prices on flights and hotels with Yahoo! FareChase.
http://farechase.yahoo.com/



More information about the Python-list mailing list