Подтвердить что ты не робот

Могу ли я пометить переменные как переходные, чтобы они не были маринованными?

Скажем, у меня есть класс:

class Thing(object):
    cachedBar = None

    def __init__(self, foo):
        self.foo = foo

    def bar(self):
        if not self.cachedBar:
            self.cachedBar = doSomeIntenseCalculation()
        return self.cachedBar

Чтобы получить некоторый интенсивный расчет, поэтому я кэширую его в памяти, чтобы ускорить процесс.

Однако, когда я маринован один из этих классов, я не хочу, чтобы cachedBar был маринован.

Можно ли пометить кеш-карту как изменчивую/переходную/непонятную?

4b9b3361

Ответ 1

Согласно документации Pickle, вы можете предоставить метод под названием __getstate__(), который возвращает что-то, представляющее состояние, которое вы хотите смазать (если оно не если pickle использует thing.__dict__). Итак, вы можете сделать что-то вроде этого:

class Thing:
      def __getstate__(self):
            state = dict(self.__dict__)
            del state['cachedBar']
            return state

Это не должно быть dict, но если это что-то еще, вам также нужно реализовать __setstate__(state).

Ответ 2

Внесите __getstate__, чтобы вернуть только те части объекта, который будет маринован