Given a string as user input to a Python function, I'd like to get a class object out of it if there's a class with that name in the currently defined namespace. Essentially, I want the implementation for a function which will produce this kind of result:
class Foo: pass str_to_class("Foo") ==> <class __main__.Foo at 0x69ba0>
Is this, at all, possible?
eval()can be used to execute arbitrary Python code. You should never use
eval()with untrusted strings. (See Security of Python's eval() on untrusted strings?)
This seems simplest.
>>> class Foo(object): ... pass ... >>> eval("Foo") <class '__main__.Foo'>
This could work:
import sys def str_to_class(classname): return getattr(sys.modules[__name__], classname)