On Thu, 31 Dec 2009 08:54:57 -0800, Wells wrote: > Sorry, this is totally basic, but my Google-fu is failing: > > I have a variable foo. I want to instantiate a class based on its value- > how can I do this?
The right way to do it is like this: >>> class C: ... pass ... >>> foo = C # assign the class itself to the variable foo >>> instance = foo() >>> instance <__main__.C instance at 0xb7ce60ec> Many newbies don't think of that, because they're not used to classes being first-class objects like strings, floats, ints and similar. It's a very useful technique when you want to do something to a whole lot of different classes: for theclass in [MyClass, C, Klass, int, str, SomethingElse]: process(theclass()) Here's an alternative, for those times you only have the name of the class (perhaps because you've read it from a config file): >>> foo = "C" # the name of the class >>> actual_class = globals()[foo] >>> instance = actual_class() >>> instance <__main__.C instance at 0xb7ce608c> The obvious variation if the class belongs to another module is to use getattr(module, foo) instead of globals()[foo]. -- Steven -- http://mail.python.org/mailman/listinfo/python-list