gpt4 book ai didi

python - pickle 除一个以外的所有属性

转载 作者:IT老高 更新时间:2023-10-28 22:19:17 26 4
gpt4 key购买 nike

编写__getstate__ 方法的最佳方法是 pickle 几乎对象的所有属性,但排除一些属性?

我有一个具有许多属性的对象,包括一个引用实例方法的对象。 instancemethod 不可 pickle ,因此当我尝试 pickle 此对象时出现错误:

class Foo(object):
def __init__(self):
self.a = 'spam'
self.b = 'eggs'
self.c = 42
self.fn = self.my_func
def my_func(self):
print 'My hovercraft is full of eels'

import pickle
pickle.dumps(Foo()) # throws a "can't pickle instancemethod objects" TypeError

这个 __getstate__ 方法解决了这个问题,但是我必须手动包含我想要序列化的所有属性:

def __getstate__(self):
return { 'a': self.a, 'b': self.b, 'c': self.c }

如果我有一个具有许多属性或经常更改的对象,那么这不是非常可扩展或可维护的。

我能想到的唯一替代方法是某种辅助函数,它遍历对象的属性并根据类型将它们添加(或不添加)到字典中。

最佳答案

The only alternative I can think of is some kind of helper function that iterates through an object's properties and adds them (or not) to the dictionary, based on the type.

是的,如果您想要足够的“魔法”来让自己变得懒惰(和/或允许动态添加属性),我认为这几乎就是您所剩下的。请记住,“pickle 无法处理此问题”并不是您不想在 pickle 状态中包含某些内容的唯一原因。

但这并不像你想象的那么难,假设你有“我应该 pickle 这个吗?”的代码。逻辑:

def __getstate__(self):
return {k:v for (k, v) in self.__dict__.items() if should_pickle(v)}

关于python - pickle 除一个以外的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6635331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com