如何腌制自己的一部分
How to pickle PART of yourself
所以,我正在从 class 中挑选一个对象(参见 How to pickle yourself ):
def save(self, path):
f = open(path, 'wb')
pickle.dump(self, f)
f.close()
@classmethod
def load(cls, path):
f = open(path, 'rb')
obj = pickle.load(f)
f.close()
return obj
效果很好。但是在大多数情况下我不想腌制一个很大的属性。我怎样才能做到这一点?应该看起来像这样:
def save(self, path, without_attr_x =True):
f = open(path, 'wb')
if(without_attr_x):
#somehow remove attr_x from the pickling
# I could do self.attr_x = None but this deletes attr_x from the running instance as well
pickle.dump(self, f)
f.close()
您必须在酸洗之前从 class/instance 中删除此属性。
您可以将其分配给 external/global 变量,在 class/instance 中将其删除,pickle class/instance,然后从 external/global 变量再次分配。
像这样:
# ... external variables ...
attr_x = None
# ... class ...
def save(self, path, without_attr_x=True):
global attr_x
f = open(path, 'wb')
if without_attr_x:
# assign to external variable
attr_x = self.attr_x
# remove value
self.attr_x = None
pickle.dump(self, f)
if without_attr_x:
# assign back from external variable
self.attr_x = attr_x
f.close()
所以,我正在从 class 中挑选一个对象(参见 How to pickle yourself ):
def save(self, path):
f = open(path, 'wb')
pickle.dump(self, f)
f.close()
@classmethod
def load(cls, path):
f = open(path, 'rb')
obj = pickle.load(f)
f.close()
return obj
效果很好。但是在大多数情况下我不想腌制一个很大的属性。我怎样才能做到这一点?应该看起来像这样:
def save(self, path, without_attr_x =True):
f = open(path, 'wb')
if(without_attr_x):
#somehow remove attr_x from the pickling
# I could do self.attr_x = None but this deletes attr_x from the running instance as well
pickle.dump(self, f)
f.close()
您必须在酸洗之前从 class/instance 中删除此属性。
您可以将其分配给 external/global 变量,在 class/instance 中将其删除,pickle class/instance,然后从 external/global 变量再次分配。
像这样:
# ... external variables ...
attr_x = None
# ... class ...
def save(self, path, without_attr_x=True):
global attr_x
f = open(path, 'wb')
if without_attr_x:
# assign to external variable
attr_x = self.attr_x
# remove value
self.attr_x = None
pickle.dump(self, f)
if without_attr_x:
# assign back from external variable
self.attr_x = attr_x
f.close()