如何在Python的for循环中更改对象变量
我不太确定这个问题是简单的,还是需要深入研究一下。
假设我有一个对象 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
,它们和循环之前是一样的。
有没有办法在循环中传递引用?我知道如何对列表进行操作,但找不到关于对象的答案。
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)