PlotHandler
我创建了一个类的许多实例。一个实例必须保持它的变量私有。但是我管理它们的方式导致了一个难以检测的问题,一个私有列表变量在实例之间共享!而且这也没有任何明显的泄漏来源。
我的调试告诉我,修改列表的私有成员函数看到的是同一个列表,即使它们是不同的对象。
这是一个“陷阱”问题吗?解决此问题的最佳方法是什么?
这是实现的相关部分(我希望它们是!)。请参阅全大写评论:
实现 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