Surcharge des parenthèses __call__ python
Salut à tous,
Pour un projet de jeu de Reversi en Python en NSI, je dois implémenter une classe Plateau utilisant la surcharge des opérateurs () __call__ :
class Plateau :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| def __init__ (self, long, haut):
self.m_long = long
self.m_haut = haut
self.matrice = []
for i in range (self.m_long*self.m_haut):
self.matrice.append('_')
"""
Initialisation de la classe Plateau, prenant un nombre de lignes et de colonnes comme paramètres,
le plateau fonctionne à l'aide d'une matrice remplie au préalable d'underscores.
"""
def __call__ (self, x, y):
assert (x < self.m_long and y < self.m_haut, 'Coordonnées invalides')
indice = y * self.m_haut + x
return self.matrice[indice]
"""
Surcharge des opérateurs () permettant d'accéder à une valeur de la matrice à l'aide de ses coordonnées.
"""
def __repr__ (self):
affichage = ""
affichage += " "
for j in range (self.m_haut):
affichage += str(j) + " "
affichage += "\n"
# Ligne du haut affichant les coordonnées x
for i in range(self.m_long):
affichage += str(i) + " "
for j in range(self.m_haut):
affichage += str(self(i, j)) + " "
affichage += "\n"
# Affichage des coordonnées y et des valeurs de la matrice
return affichage
"""
Affichage du Plateau sous la forme
1 2 ...
1 _ _
2 _ _
...
"""
plateau = Plateau(8, 8) # Plateau de jeu Reversi instancié avec 8 lignes et 8 colonnes
print(plateau)
print(plateau(0, 0)) # Affichage du coin en haut à gauche de la matrice
plateau(0, 0) = 'X' # ligne faisant planter le programme |
L'affichage des cases fonctionne correctement avec la surcharge __call__, sauf que lorsqu'il s'agit de modifier une valeur, cette erreur s'affiche :
Citation:
SyntaxError: cannot assign to function call
Or, le programme devrait juste changer la valeur de la case car la dernière ligne devrait accéder à plateau.matrice[0], sachant que le type du tableau est str, ce qui ne devrait pas poser problème.
D'après le message d'erreur, il y aurait une erreur de syntaxe, je devrais utiliser les opérateurs ==, qui ne servent pas à affecter une nouvelle valeur, une case d'un tableau est pourtant sensée être modifiable, pourquoi non ici ?
Merci d'avance.