【问题标题】:Python, override__getstate__() and __setstate__()Python,覆盖__getstate__() 和 __setstate__()
【发布时间】:2012-09-27 18:35:17
【问题描述】:

我有这些课程:

class Family(object):
    __slot__ = ['father', 'var1']
    def __init__(self, father, var1 = 1):
        self.father, self.var1 = father var1

class Father(object):
    __slots__ = ['var2']
    def __init__(self, var2 = ''):
        self.var2 = var2

father = Father()
family = Family(father = father)

我想腌制“家庭”对象。所以我需要覆盖__getstate____setstate__ “家庭”和“父亲”类。

你能告诉我一个有效的方法吗? (我之所以使用__slots__是因为我有很多对象,我想节省内存)

【问题讨论】:

    标签: python


    【解决方案1】:

    __getstate__ 应该返回一个带有足够信息的可挑选对象(例如元组)来重建实例。

    __setstate__ 应该会收到相同的对象,并使用它来重新配置实例。

    例如:

    import cPickle as pickle
    
    class Family(object):
        __slots__ = ['father', 'var1']
        def __init__(self, father, var1 = 1):
            self.father, self.var1 = father, var1
        def __getstate__(self):
            return self.father, self.var1
        def __setstate__(self, state):
            self.father, self.var1 = state
    
    foo = Family('father',1)
    foo.var1 = 2
    foo_pickled = pickle.dumps(foo)
    foo2 = pickle.loads(foo_pickled)
    print(repr(foo2))
    # <__main__.Family object at 0xb77037ec>
    
    print(foo2.var1)
    # 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2018-02-04
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多