2011-07-28 111 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

相關問題