pickle 和 tkinter 的问题

Jul*_*éon 1 python tkinter pickle

为了学习 tkinter,我正在制作一个简单的围棋游戏程序。我现在希望能够使用 pickle 保存游戏,但是当我尝试 pickle 我的GoBoardModel对象时,我得到:

PicklingError: Can't pickle 'tkapp' object: <tkapp object at 0x01FCB090>
Run Code Online (Sandbox Code Playgroud)

我想这是因为虽然 GUI 和围棋板的模型分离得很好,但模型仍然引用视图来推送一些东西,所以 pickle 可能会尝试腌制一些 tk 东西。当然,我只想 pickle 模型,那么有什么方法可以告诉 pickle 不要关心对 GUI 的引用吗?或者用另一种方法来解决这个问题?

我知道我可以摆脱这个参考,但我来这里是为了学习:)

blu*_*ume 5

是的,研究一下__getstate__方法。

例如,如果您希望 pickle 忽略“view”属性,您可以执行以下操作:

class Whatever(object):

  def __getstate__(self):
    state = self.__dict__.copy()
    del state['view']
    return state
Run Code Online (Sandbox Code Playgroud)