如何将表示bpy属性路径的字符串转换为对应属性对象并获取其值
方案1:安全无代码执行风险的通用实现(推荐)
通过逐层调用getattr解析嵌套属性路径,完全规避任意代码执行风险,适配所有合法的属性路径场景:
import bpy attr_str = "bpy.context.scene.eevee.use_gtao" # 拆分属性路径,取出根模块和后续嵌套属性 path_segments = attr_str.split(".") current = globals()[path_segments[0]] for seg in path_segments[1:]: current = getattr(current, seg) Val = current
你也可以封装成通用工具函数方便重复调用:
def resolve_attr_path(attr_path: str): segments = attr_path.split(".") # 加载根模块/对象 current = __import__(segments[0]) if segments[0] not in globals() else globals()[segments[0]] for seg in segments[1:]: current = getattr(current, seg) return current # 调用示例 Val = resolve_attr_path("bpy.context.scene.eevee.use_gtao")
方案2:可信场景下的极简实现
如果你可以100%保证属性字符串的来源安全、没有被恶意篡改的可能,直接用eval即可一步完成转换:
import bpy Val = eval("bpy.context.scene.eevee.use_gtao")
注意:
eval会执行字符串内的所有有效Python代码,非可信场景下使用会存在严重安全隐患。
两种方案最终得到的Val都和直接访问bpy.context.scene.eevee.use_gtao拿到的布尔值完全一致。
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

