2011-07-28 90 views
4

我不确定这是简单的解决方案,还是需要深入挖掘的问题。如何在python中更改for循环中的对象变量

比方说,我有一个对象Item与变量Item.aItem.b。 现在我有这些对象的两个实例:Item1Item2

我需要的是这样的:当然

for (value_1, value_2) in [(Item1.a, Item2.a), (Item1.b, Item2.b)]: 
    if value_1 != value_2: 
     value_1 = value_2 

这一块也是惟一比较复杂的问题的一个例子。替代是好的,它发现对象之间的差异并替代它们。问题是,我一直在做这些变量的副本,而不是对象引用。一旦完成循环,我可以打印Item1Item2,它们与之前的循环相同。

有没有可能将引用传递给循环?我知道如何使用列表来完成它,但我无法找到对象的答案。

+0

我已经解释,这只是一个例子。其实我正在比较我收到的两个实例,并用SOAP请求更新其中的一个实例。我不创建它们 - 我只能改变它们的变量。我用Item不是为了使问题复杂化,而是为了我所需要的。 – Gandi

+0

如果你没有比较“类属性”,但实际上是比较“对象属性”,那么你的问题是误导。请尽量让你的问题看起来像你真正的问题。 –

回答

9

那么,[(Item1.a, Item2.a), (Item1.b, Item2.b)]只是创建一些值的元组列表。已经通过创建这个你已经失去了与ItemX的连接。你的问题与循环无关。

也许你想

for prop in ('a', 'b'): 
    i2prop = getattr(Item2, prop) 
    if getattr(Item1, prop) != i2prop: 
     setattr(Item1, prop, i2prop) 

或类似的东西,但与通过ItemX的环太:

for x, y, prop in ((Item1, Item2, 'a'), (Item1, Item2, 'b')): 
    yprop = getattr(y, prop) 
    if getattr(x, prop) != yprop: 
     setattr(x, prop, yprop) 
+0

谢谢,那正是我所看到的。即使没有将项目传入循环。 – Gandi

相关问题