Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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中更改for循环中的对象变量_Python_Loops_Reference - Fatal编程技术网

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

如何在python中更改for循环中的对象变量,python,loops,reference,Python,Loops,Reference,我不确定这是一个容易解决的问题,还是一个需要深入挖掘的问题 假设我有一个对象Item,带有变量Item.a和Item.b。 现在我有两个这些对象的实例:Item1和Item2 我需要的是这样的东西: for (value_1, value_2) in [(Item1.a, Item2.a), (Item1.b, Item2.b)]: if value_1 != value_2: value_1 = value_2 当然,这只是一个更复杂问题的例子。替换是正常的,它会发现

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

假设我有一个对象
Item
,带有变量
Item.a
Item.b
。 现在我有两个这些对象的实例:
Item1
Item2

我需要的是这样的东西:

for (value_1, value_2) in [(Item1.a, Item2.a), (Item1.b, Item2.b)]:
    if value_1 != value_2:
        value_1 = value_2
当然,这只是一个更复杂问题的例子。替换是正常的,它会发现对象之间的差异并替换它们。问题是,我一直在这些变量的副本上做这件事,而不是在对象引用上。一旦循环完成,我就可以打印
Item1
Item2
,它们与循环之前相同

是否有可能将引用传递到循环中?我知道如何使用列表,但我找不到对象的答案。

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

谢谢,那正是我想要的。即使没有将项目传递到循环中,我已经解释过了,这只是一个例子。实际上,我正在比较我收到的两个实例,并使用SOAP请求更新其中一个实例。我不创建它们-我只能更改它们的变量。我使用这个项目并不是为了使问题复杂化,只是为了问我需要什么。如果你不是在比较“类属性”,而是在比较“对象属性”,那么你的问题就是误导。请尽量让你的问题看起来像你真正的问题。