当python属性本身是类时,如何将用户提供的参数分配给该属性
我可能完全错了,但我是一个google taugh python程序员,就是这样 我创建了一个名为“create”的类来构建一个对象。该对象的属性是另一个类(设置)的实例 这使我可以单独调用每个对象设置的复杂属性。例如,通过选中a.filter.IsRequired查看执行是否需要设置(筛选器) 要调整设置,特别是“值”,我将从用户处获取输入。当python属性本身是类时,如何将用户提供的参数分配给该属性,python,python-2.7,Python,Python 2.7,我可能完全错了,但我是一个google taugh python程序员,就是这样 我创建了一个名为“create”的类来构建一个对象。该对象的属性是另一个类(设置)的实例 这使我可以单独调用每个对象设置的复杂属性。例如,通过选中a.filter.IsRequired查看执行是否需要设置(筛选器) 要调整设置,特别是“值”,我将从用户处获取输入。 通过使用eval,我可以使用字符串引用整个对象 >>>one="a" >>>eval(one).filter.IsR
通过使用eval,我可以使用字符串引用整个对象
>>>one="a"
>>>eval(one).filter.IsRequired
True
>>>eval(one).filter.value="NewValue"
>>>a.filter.value
'NewValue'
现在是问题。我正试图根据用户提供的输入更改“过滤器”
var1="a"
var2="filter"
>>> eval(var1).eval(var2).value
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: create instance has no attribute 'eval'
var1=“a”
var2=“过滤器”
>>>eval(var1).eval(var2).value
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:创建实例没有属性“eval”
在本例中,如何将用户提供的变量分配给“过滤器”的“值”?您所说的
eval(var1).eval(var2).value
是指:
getattr(eval(var1), var2).value
撇开奇怪的类样式不谈(您应该阅读Python中的类继承),您不应该对几乎任何东西使用
eval()
(阅读)-如果需要从全局命名空间按名称访问变量,请使用:
其次,如果要按名称访问对象的属性,请使用,因此:
谢谢实际上我刚到那里。结果我需要离开一分钟。inner=getattr(eval(var1),var2)setattr(var2,“filter”,“newvalue)这最终在银行工作,我会仔细阅读。我知道eval是危险的,原因有很多。我很小心,不去评估()用户提供的任何东西。@NathanGrosse-除了从安全/稳定性的角度来看是危险的,
eval()
的速度也非常慢。除了一些非常特殊的边缘情况外,真的没有理由使用eval()
。
getattr(eval(var1), var2).value
var1 = "a"
a_value = globals()[var1]
var1 = "a"
var2 = "filter"
a_filter_value = getattr(globals()[var1], var2).value