Чтобы узнать tkinter, я делаю простую программу игры Go. Теперь я хотел бы сохранить игру, используя pickle, но когда я пытаюсь раскрыть мой объект GoBoardModel
, я получаю:
PicklingError: Can't pickle 'tkapp' object: <tkapp object at 0x01FCB090>
Я предполагаю, что это происходит из-за того, что, хотя графический интерфейс и модель go board довольно хорошо разделены, модель все еще имеет ссылку на представление, чтобы подтолкнуть некоторые вещи, поэтому маринование, вероятно, пытается рассолить некоторые tk вещи. Конечно, я бы хотел рассолить только модель, так есть ли способ сказать марину, чтобы не заботиться об этой ссылке на графический интерфейс? Или другой способ решить проблему?
Я знаю, что могу просто избавиться от этой ссылки, но я здесь, чтобы узнать:)
Да, просмотрите метод __getstate__
.
Например, если вы хотите, чтобы pickle игнорировал атрибут "view", вы сделали бы следующее:
class Whatever(object):
def __getstate__(self):
state = self.__dict__.copy()
del state['view']
return state