擅长:python、mysql、java
<p>我不知道您是否找到了它,但是正式的Python文档中有<a href="https://docs.python.org/2/library/pickle.html#pickling-and-unpickling-extension-types" rel="nofollow noreferrer">a section on pickling extension types</a>(不幸的是,这个文档似乎没有Python 3版本,但它在python3中的工作原理相同)。</p>
<p>我想你有三个问题。首先,由<code>__reduce__</code>返回的函数应该从头创建一个新对象并返回它,而<code>rebuild</code>函数只设置一些属性。其次,由<code>__reduce__</code>返回的元组本身必须是可拾取的,并且作为一种方法,<code>Perceptron_avg_my.rebuild</code>是不可拾取的(我认为在python 3.3或3.4中应该会修复这个问题)。相反,您可以将其转换为模块级函数。最后,参数<code>(self.fpos,self.freePos)</code>单独传递给<code>rebuild</code>您不必自己解包元组。</p>
<p>以下内容似乎对我有用(尽管您可能也希望存储其他属性的值,否则它们的初始值将由<code>__init__</code>设置):</p>
<pre><code>#inside the class definition
def __reduce__(self):
return (rebuild, (self.wlen, self.fpos, self.freePos))
#standalone function
def rebuild(wlen, fpos, freePos):
p = Perceptron_avg_my(wlen)
p.fpos = fpos
p.freePos = freePos
return p
</code></pre>