PlotHandler
クラスのインスタンスをたくさん作成しました。インスタンスは、変数をプライベートに保つ必要があります。しかし、私がそれらを管理した方法は、問題を検出するのが難しいことにつながりました。プライベートリスト変数はインスタンス間で共有されます!そして、それもリークの明らかな原因がありません。
私のデバッグでは、リストを変更するプライベートメンバー関数は、オブジェクトが異なっていても同じリストを参照することがわかりました。
これは「落とし穴」の問題ですか?これをトラブルシューティングするための最良の方法は何ですか?
これが実装の関連部分です(私はそれらがそうであることを願っています!)。ALL-CAPSのコメントをご覧ください。
PlotHandlerを実装するファイル:
class PlotHandler(wx.Frame):
__crop_section = None
__projection = None
__crop_xcord = None
_band_data = [] #THIS GETS SHARED
def _on_plot_click(self, xcord): #CALLED BY ANOTHER OBJECT
band = self._analyze_band( xcord )
self._band_data.append(band)
...
PlotHandlersを管理している親クラス:
class MainFrame(wx.Frame):
__close_callback__ = None
_plot_handlers = []
def __init__(self, parent, title):
...
def InitUI(self):
...
img_handler = ImageHandler(panel)
self.img_src.register_callback( img_handler.update_image )
#you need to call PlotHandler(parent, cropped)
img_handler.register_sample_callback( self._create_new_plot_handler )
...
def _create_new_plot_handler(self, cropped_sample ):
self._plot_handlers.append( PlotHandler(self, cropped_sample) ) #CREATE THEM