如何在Python的for循环中更改对象变量

7

我不确定这是一个容易解决的问题还是需要深入挖掘一下。

假设我有一个对象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,它们与循环前相同。
是否有可能将引用传递到循环中?我知道如何在列表中做到这一点,但我找不到对象的答案。

我之前的解释只是一个例子。实际上,我正在比较两个实例,并使用SOAP请求更新其中一个。我不会创建它们 - 我只能更改它们的变量。我使用了“Item”来简化问题并仅询问我所需的内容。 - Gandi
如果你不是在比较“类属性”,而是在比较“对象属性”,那么你的问题就有误导性了。请尽量让你的问题看起来像你真正的问题。 - S.Lott
1个回答

13

嗯,[(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)

谢谢,这正是我在寻找的。即使没有将项目传递到循环中。 - Gandi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接