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

7 投票
1 回答
5966 浏览
提问于 2025-04-16 22:25

我不太确定这个问题是简单的,还是需要深入研究一下。

假设我有一个对象 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,它们和循环之前是一样的。

有没有办法在循环中传递引用?我知道如何对列表进行操作,但找不到关于对象的答案。

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)

撰写回答