我有这些课程:
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)
Run Code Online (Sandbox Code Playgroud)
我想腌制"家庭"对象.所以我需要覆盖__getstate__
和__setstate__
"家庭"和"父亲"类.
你能告诉我一个有效的方法吗?(我使用的原因__slots__
是因为我有很多对象而且我正在努力节省内存)
unu*_*tbu 23
__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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6598 次 |
最近记录: |