[Tutor] getattr()

bob gailer bgailer at gmail.com
Wed Aug 4 21:32:39 CEST 2010


On 8/4/2010 1:23 PM, Pete wrote:
> Hi,
>
> I'm trying to understand the syntax for reflection in python. I was 
> wondering about this.
>
> From the example on diveintopython:
>
> http://diveintopython.org/power_of_introspection/index.html
>
> import  statsout
>
> def  output(data, format="text"):
>      output_function = getattr(statsout,"output_%s"  % format, statsout.output_text)
>      return  output_function(data)
>    
> I was wondering about how to make this work if the function that you 
> are trying to call is not in a module.

Everything in Python is in a module. I suspect you mean not in an 
imported module, e.g. in the main module. Whose __name__ is '__main__'. 
A reference to the main module can be found:

import sys
main = sys.modules['__main__']

> Is that possible?
>
> Something like this:
>
> def  output_text(data):
>      return_value = "This is text: " + data
>      return  return_value
>
> def  output(data, format="text"):
>      output_function = getattr(*****,"output_%s"  % format, statsout.output_text)
>      return  output_function(data)
>
> What I can't figure out is what to put in place of *****. I've tried 
> globals()['__name__'], in various forms, to no avail.

Replace those stars with main as derived above.

globals()['output_text'] will also give you a reference to the function.

-- 
Bob Gailer
919-636-4239
Chapel Hill NC

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100804/61e27b7a/attachment.html>


More information about the Tutor mailing list