I am trying to override setter and decorate it, but don't understand how it works for multidimensional array.
class Board:
def __init__(self):
self.board = []
for k in range(3):
self.board.append([0] * 3)
def __str__(self):
return '\n'.join([' '.join([str(num) for num in row]) for row in self.board])
def __repr__(self):
return self.__str__()
def __setitem__(self, item, value):
print(f'setting {item=}\t\t{value=}')
self.board[item] = value
def __getitem__(self, item):
print(f'getting {item=}')
return self.board[item]
I found out, that setter/getter doesn't work as I expect
>>> board = Board()
>>> print(board)
0 0 0
0 0 0
0 0 0
>>> print(board[1][1])
getting item=1
0
>>> board[1][1] = 3
getting item=1
I expected, that setter will work here, but I think that getter returns list and modifies element of that list.
>>> print(board)
0 0 0
0 3 0
0 0 0
>>> board[0] = [1, 3, 1]
setting item=0 value=[1, 3, 1]
>>> print(board)
1 3 1
0 3 0
0 0 0
Setter works only if I use no more than 1 index.