[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