2017-10-19 19 views
0

クラス内で関数を定義するときにエラーが発生しましたが、実行時にコードの動作方法は変更されません。Pythonクラスがグローバル変数をグローバルに宣言せずにグローバル変数を変更しています

私が作成したエラーは、インスタンス変数を使用するときにグローバル変数を使用していました。私は書くことが何を意味するのか

だった:

self._map_data[screen_pos_layer][y][x] = selected_material 

代わりに、私が書いた:

map_data[screen_pos_layer][y][x] = selected_material 

しかし、目的の機能は、(LEDの色を変更)、どんなには変更されません。インスタンス化された変数またはグローバル変数の場合実際にLEDに色を書き込む機能は、別のクラスにあります。

私はglobal <variable>を含めると発生する可能性がありますか?私はPythonでの経験はほとんどありませんが、これが正しいと確信しています。

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) 

私は特にありませんしようとしています、私はこれを探してみましたが、私は唯一のクラスでグローバル変数を使用したい人についての記事を見つけることができます。

+0

あなたは単に間違っています。 Pythonでは、ローカルスコープ内に名前が見つからない場合は、グローバルをチェックします。 –

答えて

0

あなたのコードは以前はグローバル変数map_dataを作成していたので、表示しているコードはmap_data変数を再作成していないため、既存の変数の要素のみを変更しています。既存の変数は、通常の名前検索によって検索されます。したがって、この場合は、グローバルコンテキストで検出されます。

+0

グローバルリストの要素は、リスト自体をグローバルとして宣言することなく変更できますか?それは知ってよかった、ありがとう。 – sgtgig

+0

はい、リストや辞書、またはその他の可変オブジェクトです。 –

関連する問題