gpt4 book ai didi

python - pickle set 的子类时未调用 __getstate__ 方法

转载 作者:太空狗 更新时间:2023-10-30 01:14:57 25 4
gpt4 key购买 nike

据我所知,当在对象上调用 pickle.dumps 时,它会调用对象的 __getstate__ 方法(​​如果有的话)来确定要 pickle 的内容。

如果我创建一个类,例如:

class DictClass(dict):
def __getstate__(self):
print "pickling"
return self

我得到这个结果:

>>> pickle.dumps(DictClass())
pickling
'ccopy_reg\n_reconstructor\np0...'

我可以做同样的事情,将“dict”替换为“list”:

class ListClass(list):
def __getstate__(self):
print "pickling"
return self

>>> pickle.dumps(ListClass())
pickling
'ccopy_reg\n_reconstructor\np0...'

但是如果我使用“set”,会发生一些不同的事情:

class SetClass(set):
def __getstate__(self):
print "pickling"
return self

>>> pickle.dumps(SetClass())
'c__main__\nSetClass...'

__getstate__ 方法不会被调用。为什么会这样,是否可以指定集合的​​子类的哪一部分进行 pickle?

最佳答案

list 没有实现 __reduce__() ,而 set 会:

>>> list().__reduce__()
...
TypeError: can't pickle list objects
>>> set().__reduce__()
(<type 'set'>, ([],), None)

上例中最后一个元组被 pickled,所以 SetClass.__getstate__() 永远不会进入画面。

关于python - pickle set 的子类时未调用 __getstate__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950097/

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