is it possible to create an object by its name in the run time

Christopher T King squirrel at WPI.EDU
Tue Aug 17 15:06:12 EDT 2004


On Tue, 17 Aug 2004, Yang Zhang wrote:

> I want to know if it is a build-in func(where can I look up?). If so,
> ignore it otherwise I want to find out which module is it defined in.

All functions and classes have a __module__ attribute which is set to the 
name of the module in which they were defined.

> All I know is the name (which is a string), and all the modules that
> this program have imported.

If you first "import __main__", you can use getattr(__main__,"foo") to get 
the object named "foo" in the global namespace.

> In the same way, I also need to process the class and methods call. I
> wonder if it is possible? I will appreciate your help very much!!

Here is a small snippet demonstrating the above:

 import __main__
 from types import FunctionType, ClassType

 def which_module(name, where = __main__):
     try:
         obj = getattr(where, name)
     except AttributeError:
         obj = getattr(__builtins__, name)
     try:
         return obj.__module__
     except AttributeError:
         if not isinstance(obj, (FunctionType, ClassType)):
             raise TypeError, "%s doesn't reference a function or class" % name
         return None

 print which_module('list')  # --> '__builtin__'
 from math import sin
 print which_module('sin')   # --> 'math'
 a = 6
 print which_module('a')     # --> TypeError

Hope this helps.




More information about the Python-list mailing list