Как изменить переменные объекта в цикле for в Python - PullRequest
6 голосов
/ 28 июля 2011

Я не уверен, является ли это легкой проблемой с легким решением или это то, что нужно копать немного глубже.

Допустим, у меня есть объект 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 Ответ

10 голосов
/ 28 июля 2011

Ну, [(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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...