Python,重写getstate和setstate

2024-04-28 07:10:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这些课程:

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__的原因是因为我有很多对象,并且我试图保存内存)


Tags: 对象selfobjectinitdef家庭familyclass
1条回答
网友
1楼 · 发布于 2024-04-28 07:10:29

^{}应该返回一个picklable对象(如元组),该对象具有足够的信息来重建实例。

^{}应该期望接收相同的对象,并使用它重新配置实例。

例如:

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

相关问题 更多 >