I want to use one of two functions in a script:
def func_one(): pass
def func_two(): pass
func = getattr(x, 'func_'+number)
func()
'x' in getattr() should be a reference to the "__main__" module, right?
How to get it? The 'if' clause should work here. I am just curious if
we can use the above method.
Thanks,
-WH
> Hi,
>
> I want to use one of two functions in a script:
>
> def func_one(): pass
> def func_two(): pass
>
> func = getattr(x, 'func_'+number)
> func()
>
> 'x' in getattr() should be a reference to the "__main__" module, right?
> How to get it?
# File test.py
def func_one():
return "one = 1"
def func_two():
return "two = 2"
if __name__ == '__main__':
import __main__
func = getattr(__main__, 'func_' + 'two')
print func()
import test
print getattr(test, 'func_' + 'one')()
which works, but importing yourself can be tricky. Try taking the "if
__name__" test out and running the script and see what happens.
This is probably a better way to solve your problem that doesn't rely on
the module importing itself:
def func_one():
return "one = 1"
def func_two():
return "two = 2"
funcs = {'one': func_one, 'two': func_two}
print funcs['one']
--
Steven
from sys import modules
__main__ = modules["__main__"] # or call the variable whatever you want
assert __main__.__dict__ is globals() # purely for pedagogy
func = getattr(__main__, 'func_'+number)
Of course, in your particular case, the code can be simplified to
avoid getattr() altogether:
func = globals()['func_'+number]
Cheers,
Chris
--
http://blog.rebertia.com
Just for the record, the best way to get a reference to __main__ is to
import it:
import __main__
--
Aahz (aa...@pythoncraft.com) <*> http://www.pythoncraft.com/
"If you don't know what your program is supposed to do, you'd better not
start writing it." --Dijkstra