Assuming def my_function(): is located in my_apps.views I would like to import "my_function" dynamically without using something like exec or eval.
Is there anyway to accomplish this. I'm looking to do something similar to:
my_function = import_func("my_apps.views.my_function")
my_function()
... code is executed
解决方案
you want
my_function = getattr(__import__('my_apps.views'), 'my_function')
If you happen to know the name of the function at compile time, you can shorten this to
my_function = __import__('my_apps.views').my_function
This will load my_apps.views and then assign its my_function attribute to the local my_function.
If you are sure that you only want one function, than this is acceptable. If you want more than one attribute, you can do:
views = __import__('my_apps.views')
my_function = getattr(views, 'my_function')
my_other_function = getattr(views, 'my_other_function')
my_attribute = getattr(views, 'my_attribute')
as it is more readable and saves you some calls to __import__. again, if you know the names, the code can be shortened as above.
You could also do this with tools from the imp module but it's more complicated.