Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当python属性本身是类时,如何将用户提供的参数分配给该属性_Python_Python 2.7 - Fatal编程技术网

当python属性本身是类时,如何将用户提供的参数分配给该属性

当python属性本身是类时,如何将用户提供的参数分配给该属性,python,python-2.7,Python,Python 2.7,我可能完全错了,但我是一个google taugh python程序员,就是这样 我创建了一个名为“create”的类来构建一个对象。该对象的属性是另一个类(设置)的实例 这使我可以单独调用每个对象设置的复杂属性。例如,通过选中a.filter.IsRequired查看执行是否需要设置(筛选器) 要调整设置,特别是“值”,我将从用户处获取输入。 通过使用eval,我可以使用字符串引用整个对象 >>>one="a" >>>eval(one).filter.IsR

我可能完全错了,但我是一个google taugh python程序员,就是这样

我创建了一个名为“create”的类来构建一个对象。该对象的属性是另一个类(设置)的实例

这使我可以单独调用每个对象设置的复杂属性。例如,通过选中a.filter.IsRequired查看执行是否需要设置(筛选器)

要调整设置,特别是“值”,我将从用户处获取输入。
通过使用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