我可能完全错了,但我是一个google taugh python程序员,所以就是这样。
我创建了一个名为“create”的类来构建一个对象。该对象的属性是另一个类(设置)的实例
class setting:
def __init__(self,name,value,IsRequired):
self.name=name
self.IsRequired=IsRequired
self.value=value
class create:
filter=setting("filter","filter_name",True)
consumer=setting("consumer","","True")
def __init__(self, name):
self.name=name
>>>a=create("test")
>>>a.name
'test'
>>> a.filter.IsRequired
True
>>> a.filter.value
'filter_name'
这让我可以单独调用每个对象设置的复杂属性。例如,通过检查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'
如何在此示例中将用户提供的变量分配给“过滤器”的“值”?
答案 0 :(得分:0)
eval(var1).eval(var2).value
的意思是:
getattr(eval(var1), var2).value
答案 1 :(得分:0)
除了你的奇怪的类风格(你应该阅读Python中的类继承),你不应该使用eval()
几乎任何东西(阅读Eval really is dangerous) - 如果你需要按名称访问变量从全局命名空间使用globals()
:
var1 = "a"
a_value = globals()[var1]
其次,如果要按名称访问对象的属性,请使用getattr()
,所以:
var1 = "a"
var2 = "filter"
a_filter_value = getattr(globals()[var1], var2).value