首页 > 解决方案 > 使用pickle文件设置类属性?

问题描述

我想通过pickle为自定义类实现加载和保存方法。(在这个例子中,我们可以不使用参数来实例化类,然后使用'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

标签: pythonpython-3.x

解决方案


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

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


推荐阅读