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

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to