Создание списка объектов в Python

78
задан 3 revs, 3 users 96%anon 30 November 2017 в 10:47
поделиться

5 ответов

Вы демонстрируете фундаментальное недоразумение.

Вы никогда не создавали экземпляр SimpleClass вообще, потому что Вы не назвали его.

for count in xrange(4):
    x = SimpleClass()
    x.attr = count
    simplelist.append(x)

Или, если Вы позволяете классу взять параметры, вместо этого, можно использовать понимание списка.

simplelist = [SimpleClass(count) for count in xrange(4)]
62
ответ дан ironfroggy 24 November 2019 в 10:36
поделиться

Для заполнения списка отдельными экземплярами класса можно использовать для цикла в объявлении списка. * умножаются, свяжет каждую копию с тем же экземпляром.

instancelist = [ MyClass() for i in range(29)]

и затем получают доступ к экземплярам через индекс списка.

instancelist[5].attr1 = 'whamma'
52
ответ дан Zoomulator 24 November 2019 в 10:36
поделиться

Не должно быть необходимо воссоздать объект SimpleClass каждый раз, как некоторые предполагают, если Вы просто используете его для выходных данных на основе его атрибутов. Однако Вы на самом деле не создаете экземпляр класса; Вы просто создаете ссылку на сам объект класса. Поэтому Вы добавляете, что ссылка на тот же класс приписывает списку (вместо атрибута экземпляра), много раз.

Вместо:

x = SimpleClass

Вам нужно:

x = SimpleClass()
10
ответ дан 2 revs, 2 users 95% 24 November 2019 в 10:36
поделиться

Создайте новый экземпляр каждый раз, где каждый новый экземпляр имеет корректное состояние, вместо того, чтобы постоянно изменить состояние того же экземпляра.

Поочередно, сохраните явно сделанную копию объекта (использование подсказки на уровне этой страницы ) на каждом шаге, а не оригинале.

5
ответ дан joel.neely 24 November 2019 в 10:36
поделиться

Если я понимаю правильно Ваш вопрос, Вы спрашиваете способ выполнить глубокую копию объекта. Что относительно того, чтобы использовать copy.deepcopy?

import copy

x = SimpleClass()

for count in range(0,4):
  y = copy.deepcopy(x)
  (...)
  y.attr1= '*Bob* '* count

А deepcopy является рекурсивной копией всего объекта. Для более ссылочного можно взглянуть на документацию Python: https://docs.python.org/2/library/copy.html

3
ответ дан 2 revs, 2 users 97% 24 November 2019 в 10:36
поделиться
Другие вопросы по тегам:

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