Как исправить баг в создании списка объектов с помощью for?

Я с помощью цикла создаю список объектов A, в каждом объекте есть своя переменная 'а', которой присваивается инкремент. почему когда я хочу получить значения от всех объектов в цикле, они возвращают одно и тоже число.

list_a = []

class A():
    def __init__(self, a):
        self.a = a

    @property
    def get_a(self):
        return self.a

for i in range(5):
    list_a = A(i)

for i in range(5):
    print(list_a.get_a)


вывод
4
4
4
4
4
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
@wonderingpeanut
Первый цикл инициирует инстанс класса А со значением i (от 0 до 4 включительно).
Этот инстанс присваивается переменной list_a на каждой итерации цикла.
То есть с каждой новой итерацией ты перезаписываешь переменную list_a.
После окончания первого цикла переменная list_a ссылается на инстанс класса А со свойством a равным 4.

Во втором цикле ты вызываешь метод get_a инстанса класса А.
Свойство а инстанса класса А равно 4.
Каждая итерация выводит 4.
Просто и понятно (нет).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
Здесь не в классе дело а в списке. Если список, то нужен индекс.
for i in range(5):
    list_a += [A(i)] #добавлять надо как отдельный элемент  в квадратных скобках, без скобок к списку можно добавлять, например, другой список или строку, т.к. это итерируемые объекты и они будут разбиты на элементы и добавлены как список элементов, т.е. список вырастет на соотв. число элементов
list_a
Out[18]: 
[<__main__.A at 0x2423cae52b0>,
 <__main__.A at 0x2423cae5278>,
 <__main__.A at 0x2423cae5780>,
 <__main__.A at 0x2423cae5128>,
 <__main__.A at 0x2423cae5748>]
for i in range(5):
    print(list_a[i].get_a)
    
0
1
2
3
4
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы