2017-02-21 31 views
0

Я пытаюсь поэкспериментировать с объектами - мне нужен объект, который может подсчитать количество экземпляров.Странный подсчет объектов в Python

Мой код:

class Location: 
    count = 0 

    def __init__(self, column, row): 
     self.column = column 
     self.row = row 
     self.num = Location.count 
     Location.count += 1 

    def position(self): 
     print("Col: %i, Row: %i, Instance: %i" % (self.column, self.row, self.num)) 


# set up grid 
grid = [[0]*5]*5 

# Create objects in all positions 
for i in range(0, len(grid)): 
    for j in range(0, len(grid[i])): 
     grid[i][j] = Location(i, j) 
     grid[i][j].position() #prints correctly 



for i in range(0, len(grid)): 
    for j in range(0, len(grid[i])): 
     grid[i][j].position() #prints incorrectly -- WHY?!?! 

Почему при печати содержимого сетки во второй раз, показывают полностью неправильные данные?

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

Этот код не предназначен ни для чего, в частности - только для моего собственного удовольствия и обучения!

редактировать ** ВЫХОДА КОДА:

Col: 0, Row: 0, Instance: 0 
Col: 0, Row: 1, Instance: 1 
Col: 0, Row: 2, Instance: 2 
Col: 0, Row: 3, Instance: 3 
Col: 0, Row: 4, Instance: 4 
Col: 1, Row: 0, Instance: 5 
Col: 1, Row: 1, Instance: 6 
Col: 1, Row: 2, Instance: 7 
Col: 1, Row: 3, Instance: 8 
Col: 1, Row: 4, Instance: 9 
Col: 2, Row: 0, Instance: 10 
Col: 2, Row: 1, Instance: 11 
Col: 2, Row: 2, Instance: 12 
Col: 2, Row: 3, Instance: 13 
Col: 2, Row: 4, Instance: 14 
Col: 3, Row: 0, Instance: 15 
Col: 3, Row: 1, Instance: 16 
Col: 3, Row: 2, Instance: 17 
Col: 3, Row: 3, Instance: 18 
Col: 3, Row: 4, Instance: 19 
Col: 4, Row: 0, Instance: 20 
Col: 4, Row: 1, Instance: 21 
Col: 4, Row: 2, Instance: 22 
Col: 4, Row: 3, Instance: 23 
Col: 4, Row: 4, Instance: 24 
Col: 4, Row: 0, Instance: 20 
Col: 4, Row: 1, Instance: 21 
Col: 4, Row: 2, Instance: 22 
Col: 4, Row: 3, Instance: 23 
Col: 4, Row: 4, Instance: 24 
Col: 4, Row: 0, Instance: 20 
Col: 4, Row: 1, Instance: 21 
Col: 4, Row: 2, Instance: 22 
Col: 4, Row: 3, Instance: 23 
Col: 4, Row: 4, Instance: 24 
Col: 4, Row: 0, Instance: 20 
Col: 4, Row: 1, Instance: 21 
Col: 4, Row: 2, Instance: 22 
Col: 4, Row: 3, Instance: 23 
Col: 4, Row: 4, Instance: 24 
Col: 4, Row: 0, Instance: 20 
Col: 4, Row: 1, Instance: 21 
Col: 4, Row: 2, Instance: 22 
Col: 4, Row: 3, Instance: 23 
Col: 4, Row: 4, Instance: 24 
Col: 4, Row: 0, Instance: 20 
Col: 4, Row: 1, Instance: 21 
Col: 4, Row: 2, Instance: 22 
Col: 4, Row: 3, Instance: 23 
Col: 4, Row: 4, Instance: 24 

Благодаря

+0

Никогда не наносите умножение на список списков, за исключением того, вы полностью знаете, чего ожидать –

+0

Пожалуйста, покажите нам выход. Компьютерный выход не является «неправильным». Вы ошибаетесь, думая, что это «неправильно». Об этом. – pltrdy

+0

Да - я согласен с тем, что компьютер печатает то, что я ему скажу, чтобы печатать. > _ < –

ответ

1

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

Вместо этого используйте список понимание:

grid = [[0]*5] for _ in range(5)] 
+0

Спасибо ... работал отлично! Я использовал визуализатор Python, я видел, что он всегда указывал на тот же список, и я не мог понять, почему. Еще раз спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^