Python中如何将与变量同名的字符串转换为可操作的变量实例
问题原因
你当前报错的核心是find_variable_name返回的是字符串类型的值,字符串本身没有foo属性,你需要将字符串形式的变量名映射到对应的实际变量对象,这个操作在Python中是可以实现的。
快速修复方案
使用Python内置的globals()函数,它会返回当前全局作用域下所有变量组成的字典,键为变量名的字符串,值为对应的变量对象。你只需要修改循环内的打印语句即可:
for instances in range(Class_Name.count): var_name = find_variable_name(Class_Name, instances+1) # 通过globals()字典拿到实际的实例对象 print(globals()[var_name].foo)
如果要找的变量处于局部作用域,可以替换为locals()函数。
更推荐的实践
通过拼接变量名、再去全局符号表找实例的方式可维护性极低,变量名修改或者作用域变化都会直接导致代码报错。更合理的做法是将实例统一存储在容器中:
- 如果不需要通过名称索引,直接存入列表:
# 直接把所有实例存入列表 instance_list = [ Class_Name("foo", "bar"), Class_Name("foo2", "bar2"), Class_Name("foo3", "bar3") ] # 遍历直接取属性即可 for ins in instance_list: print(ins.foo)
- 如果需要通过自定义名称索引,存入字典:
instance_dict = { "variable1": Class_Name("foo", "bar"), "variable2": Class_Name("foo2", "bar2"), "variable3": Class_Name("foo3", "bar3") } # 按名称取实例 print(instance_dict["variable1"].foo)
内容的提问来源于stack exchange,提问作者eyeofcod
相关产品推荐
相关产品推荐

