Добавление перезаписывает существующие данные в списке классов - PullRequest
0 голосов
/ 28 мая 2020

Я делаю программу для решения судоку на Python.

У меня есть класс , внутренний класс , список , конструкторы и функция , что сделало бы список из Строк объектов.

    class Table:

       rows = []

       def __init__(self):
          initRows()

       class Row:

          numbers = []

          def __init__(self):
             "stuff that stores a list of integers in **numbers** list"

       def initRows(self, numbers):
          for i in range(9):
             temp_row = self.Row(i, numbers)
             self.rows.append(temp_row)

Программа выглядит так:

  1. Когда * Создан объект 1023 * Таблица , он автоматически пытается создать список длиной 9 объектов Строк с помощью функции initRows () .
  2. В initRows () функция, мы просто создаем временный объект класса Row и мгновенно append () его в список rows .
  3. Когда мы создаем объект Row , он просто сохраняет заданные числа для данной строки таблицы судоку.
  4. Если I print () the numbers список каждого временного объекта Row после его создания дает правильные значения.
[0, 0, 0, 7, 4, 0, 0, 0, 6]
[4, 0, 6, 8, 0, 0, 5, 0, 7]
[7, 0, 0, 0, 9, 0, 0, 0, 4]
[0, 3, 0, 9, 8, 4, 7, 0, 0]
[8, 2, 0, 6, 1, 3, 4, 0, 9]
[0, 4, 0, 0, 0, 0, 3, 0, 0]
[0, 6, 2, 3, 7, 0, 0, 0, 5]
[0, 0, 5, 4, 0, 9, 0, 0, 0]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
Но когда я пытаюсь print () , значения каждого объекта Row после for l oop повторяются один или несколько раз или после инициализации завершено, то список заполняется только последней строкой объектом
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]
[0, 7, 0, 0, 6, 1, 2, 0, 8]

Я искал в inte rnet для часов и нашел что у людей есть проблемы с функцией append () класса списка, но ничего не помогло.

Итак, мой вопрос: как я могу это сделать?

(Если нужна другая информация / часть кода: спрашивайте!)

1 Ответ

0 голосов
/ 29 мая 2020

Оказывается, в классе Row список чисел был атрибутом class (означает, что он используется всеми объектами Row class), а не атрибут instance .

...