使用pickle文件设置类属性?

时间:2019-01-25 22:35:23

标签: python python-3.x

我想通过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

1 个答案:

答案 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

但是,最好将属性保存到泡菜而不是对象中。