- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
据我所知,当在对象上调用 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/
我在 python 2.7 上使用 pickle。我正在尝试调用我覆盖的两种方法 __getstate__ 和 __getnewargs__ 。我不能 pickle 属性 c 因为它是类 D 的一个实
据我所知,当在对象上调用 pickle.dumps 时,它会调用对象的 __getstate__ 方法(如果有的话)来确定要 pickle 的内容。 如果我创建一个类,例如: class Dict
我想问“如何 pickle 一个继承自 dict 并定义 __slots__ 的类”。然后我在 class B 中意识到了完全令人痛苦的解决方案下面实际上有效... import pickle cla
我不知道 __setstate__ 和 __getstate__ 方法是做什么的,所以帮我举个简单的例子。 最佳答案 这是一个非常简单的 Python 示例,它应该补充 pickle docs . c
我的问题是: class A(object): def __init__(self): #init def __setstate__(self,state):
出于某种原因,每次我尝试使用 easy_install 安装新模块时,都会出现错误: AttributeError: 'module' object has no attribute '__getst
我是一名优秀的程序员,十分优秀!