如果某个类(按字符串名称)存在,如何检查python?

Ale*_*ndr 6 python class dynamic

是否可以检查某个类是否存在?我在 json 配置文件中有类名。我知道我可以简单地尝试通过类名字符串创建一个对象,但这实际上是一个坏主意,因为类构造函数可以做一些意想不到的事情,而此时我只想检查我的配置是否有效并全部提到课程可用。

有什么办法吗?

编辑:我也明白你可以从某个模块中获取所有方法,在我的情况下,我不确定并且实际上并不关心来自哪个模块的方法。它可以来自任何导入语句,我可能不知道确切来自哪里。

wen*_*zul 3

使用eval()为任意代码执行打开了大门,为了安全起见,应该避免它。

特别是如果您在这里寻求此类问题的解决方案。那么我们可以假设您对这些风险了解不够。

import sys

def str_to_class(str):
    return reduce(getattr, str.split("."), sys.modules[__name__])

try:
    cls = str_to_class(<json-fragment-here>)
except AttributeError:
    cls = None

if cls:
    obj = cls(...)
else:
    # fight against this
Run Code Online (Sandbox Code Playgroud)

这避免了使用eval并得到了多个 SO 用户的批准。解决方案类似于将字符串转换为Python类对象?