如何腌制自己的一部分

老板裤

所以,我正在从班级中腌制一个对象(请参阅如何腌制自己):

    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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章