我想通过pickle为自定义类实现load和save方法。 (在此示例中,我们可能不使用任何参数来实例化该类,而后使用“ load”分别填充a和b)
class A:
def __init__(self, a = None, b = None):
self.a = a
self.b = b
def save(self, fname):
# this works well
with open(fname, 'wb') as f:
pickle.dump(self, f)
def load(self, fname):
# This does not work
with open(fname, 'rb') as f:
self = pickle.load(f)
上面的代码不起作用,有人可以给我一些建议吗?我正在使用Python 3.6
答案 0 :(得分:0)
您的load()
应该返回一个新对象,例如:
def load(self, fname):
with open(fname, 'rb') as f:
return pickle.load(f)
和通话,如下所示:
x = x.load(fn)
其中x
是对象名称。
或者(请参见评论),您可以选择属性:
def load(self, fname):
with open(fname, 'rb') as f:
tmp = pickle.load(f)
self.a = tmp.a
self.b = tmp.b
但是,最好将属性保存到泡菜而不是对象中。