Pickle all attributes except one

后端 未结 6 989
野性不改
野性不改 2021-01-17 07:51

What is the best way to write a __getstate__ method that pickles almost all of an object\'s attributes, but excludes a few?

I have an object wi

6条回答
  •  天命终不由人
    2021-01-17 07:59

    __slots__ solution

    If you are using slots, you can avoid repeating members to exclude with:

    class C(object):
        _pickle_slots = ['i']
        __slots__ = _pickle_slots + ['j']
        def __init__(self, i, j):
            self.i = i
            self.j = j
        def __getstate__(self):
            return (None, {k:getattr(self, k) for k in C._pickle_slots })
    
    o = pickle.loads(pickle.dumps(C(1, 2), -1))
    
    # i is there
    assert o.i == 1
    
    # j was excluded
    try:
        o.j
    except:
        pass
    else:
        raise
    

    Tested in Python 2.7.6.

提交回复
热议问题