Ale*_*ndr 6 python class dynamic
是否可以检查某个类是否存在?我在 json 配置文件中有类名。我知道我可以简单地尝试通过类名字符串创建一个对象,但这实际上是一个坏主意,因为类构造函数可以做一些意想不到的事情,而此时我只想检查我的配置是否有效并全部提到课程可用。
有什么办法吗?
编辑:我也明白你可以从某个模块中获取所有方法,在我的情况下,我不确定并且实际上并不关心来自哪个模块的方法。它可以来自任何导入语句,我可能不知道确切来自哪里。
使用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类对象?。