J'ai fait une erreur en définissant une fonction dans une classe, mais cela ne change pas la façon dont le code fonctionne pendant l'exécution. L'erreur que j'ai faite était d'utiliser une variable globale quand je veux utiliser une variable instanciée.La classe Python change la variable globale sans la déclarer globale
Ce que je voulais écrire était:
self._map_data[screen_pos_layer][y][x] = selected_material
Au lieu de cela, je l'ai écrit:
map_data[screen_pos_layer][y][x] = selected_material
Cependant, la fonctionnalité prévue (changer la couleur d'une LED) ne change pas, peu importe si c'est la variable instanciée ou la variable globale. La fonction qui écrit réellement la couleur dans la LED est dans une classe différente.
Je pensais que cela ne pouvait arriver que si j'incluais global <variable>
? J'ai très peu d'expérience avec Python mais je suis sûr que c'était vrai.
class Tools(object):
def __init__(self, _map_data):
self._map_data = _map_data
def paint(self, event):
if selected_tool == select_paint and selected_color != -1:
for j in range(cursor_size_y):
for i in range(cursor_size_x):
y = screen_pos_y + cursor_pos_y + j
x = screen_pos_x + cursor_pos_x + i
map_data[screen_pos_layer][y][x] = selected_material
else:
return
moveCursor(event)
tools = Tools(map_data)
# this is a Tkinter object
window.bind_all("<Control-Up>", tools.paint)
J'ai essayé la recherche de cela, mais je ne pouvais trouver les messages au sujet des personnes qui souhaitent utiliser une variable globale dans une classe, je suis particulièrement essaie de ne pas.
Vous vous méprenez simplement. En Python, si un nom n'est pas trouvé dans la portée locale, il vérifie les globales. –