将字符串转换为Python类对象?
假设用户输入了一个字符串,我想在Python函数中根据这个字符串找到一个类的对象,前提是当前的命名空间里有这个名字的类。简单来说,我想要一个函数,它能实现这个功能,返回对应的类对象:
class Foo:
pass
str_to_class("Foo")
==> <class __main__.Foo at 0x69ba0>
这样做有可能吗?
10 个回答
146
你可以这样做:
globals()[class_name]
204
这个方法可能有效:
import sys
def str_to_class(classname):
return getattr(sys.modules[__name__], classname)
152
警告:
eval()
可以用来执行任意的 Python 代码。你绝对不应该在不可信的字符串上使用eval()
。 (详情请见 Python 的 eval() 在不可信字符串上的安全性?)
这看起来是最简单的做法。
>>> class Foo(object):
... pass
...
>>> eval("Foo")
<class '__main__.Foo'>