Python - 保存除大属性外的整个类对象
Posted
技术标签:
【中文标题】Python - 保存除大属性外的整个类对象【英文标题】:Python - Saving Entire Class Object Except For A Large Attribute 【发布时间】:2014-08-13 16:48:08 【问题描述】:我有一个要保存的对象,但其中一个属性非常大,不需要保存。除了那个属性,我如何保存对象。以下是我目前的解决方案。
class Example(object):
def __init__(self):
self.attribute_one = 1
self.attribute_two = 'blah blah'
...
self.attribute_large = very_large_object
save_this_except_attribute_large = Example()
一种可能的解决方案是
def save_example(example):
save_this = copy.deepcopy(example)
save_this.attribute_large = None
pickle.dump(save_this,open('save_path','w'))
除了上述解决方案的内存效率不高,因为在我们将其中一个设置为 None 之前,我们将在内存中有 2 个 attribute_large。
任何建议
【问题讨论】:
您是否在使用名为deep
的模块? PyPI 上的那个似乎没有copy()
。还是您使用copy.deepcopy()
?
哎呀,这是一个错字,意思是 copy.deepcopy()
【参考方案1】:
你可以使用字典推导和__getstate__
/ __setstate__
来构建一个新字典来腌制,省略大属性:
class Example(object):
def __init__(self):
self.attribute_one = 1
self.attribute_two = 'blah blah'
...
self.attribute_large = very_large_object
def __getstate__(self):
d = self.__dict__
self_dict = k : d[k] for k in d if k != 'attribute_large'
return self_dict
def __setstate__(self, state):
self.__dict__ = state
使用__getstate__
/__setstate__
可以让真正做酸洗的代码不用担心Example
的实现细节;它只是腌制对象,而对象本身会做正确的事情。
【讨论】:
以上是关于Python - 保存除大属性外的整个类对象的主要内容,如果未能解决你的问题,请参考以下文章