Вот тестовый код, который я написал.
class myclass:
def __init__(self, aty):
self.number = 0;
self.anitype = aty;
l = [];
l.append(myclass("tiger"))
l.append(myclass("lion"))
l.append(myclass("puma"))
l.append(myclass("jagur"))
# Method 1 : of course this doesn't work, but I saw a case where it works
#for idx in l: l[idx].number = idx
# Method 2 : of course this works
for idx, lst in enumerate(l):
l[idx].number = idx
for idx, lst in enumerate(l):
print("%d : %s" % (lst.number, lst.anitype))
Результат:
0 : tiger
1 : lion
2 : puma
3 : jagur
Конечно, метод 1 не должен работать, но сегодня я увидел какой-то код, полученный от другой компании, и у него есть строка ниже (только показанные фрагменты)
for idx in ls: ls[idx].Oi = idx
Здесь ls
- список объектов класса. Класс имеет переменную-член экземпляра Oi.
Считая эту строку странной, я запустил код с помощью отладчика, и он работает! Значения Oi объектов-членов списка присваиваются 0,1,2,3, ..
Как это работает? Кстати, эта строка кода видна в функции, которая не является функцией-членом класса (это глобальная функция).