pickle和tkinter的问题
为了学习tkinter,我正在制作一个简单的围棋游戏程序。现在我想用pickle来保存游戏,但当我尝试对我的GoBoardModel
对象进行pickle时,我遇到了以下问题:
PicklingError: Can't pickle 'tkapp' object: <tkapp object at 0x01FCB090>
我猜这个问题的原因是,虽然围棋板的图形界面(GUI)和模型是分开的,但模型仍然有一个指向视图的引用,以便可以推送一些内容,所以pickle可能试图处理一些tk的东西。当然,我只想对模型进行pickle,那么有没有办法告诉pickle不去管这个指向GUI的引用呢?或者有没有其他方法可以解决这个问题?
我知道我可以直接去掉这个引用,但我在这里是为了学习 :)
1 个回答
5
没错,可以看看 __getstate__
这个方法。
比如说,如果你想让 pickle 忽略 'view' 这个属性,你可以这样做:
class Whatever(object):
def __getstate__(self):
state = self.__dict__.copy()
del state['view']
return state