所以,我正在从班级中腌制一个对象(请参阅如何腌制自己):
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()
您必须在酸洗之前从类/实例中删除此属性。
您可以将其分配给外部/全局变量,在类/实例中删除它,pickle 类/实例,然后从外部/全局变量中再次分配。
像这样的东西:
# ... 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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句