将字符串转换为Python类对象?

244 投票
10 回答
386339 浏览
提问于 2025-04-15 13:07

假设用户输入了一个字符串,我想在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'>

撰写回答