uTools-Manuals/docs/python/copyreg.html
2019-04-21 11:50:48 +08:00

16 lines
7.0 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="module-copyreg"><h1><span class="yiyi-st" id="yiyi-10">12.2. <a class="reference internal" href="#module-copyreg" title="copyreg: Register pickle support functions."><code class="xref py py-mod docutils literal"><span class="pre">copyreg</span></code></a> - 注册<a class="reference internal" href="pickle.html#module-pickle" title="pickle: Convert Python objects to streams of bytes and back."><code class="xref py py-mod docutils literal"><span class="pre">pickle</span></code></a>支持功能</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/copyreg.py">Lib / copyreg.py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-copyreg" title="copyreg: Register pickle support functions."><code class="xref py py-mod docutils literal"><span class="pre">copyreg</span></code></a>模块提供了一种方法来定义在选择特定对象时使用的函数。</span><span class="yiyi-st" id="yiyi-13"><a class="reference internal" href="pickle.html#module-pickle" title="pickle: Convert Python objects to streams of bytes and back."><code class="xref py py-mod docutils literal"><span class="pre">pickle</span></code></a><a class="reference internal" href="copy.html#module-copy" title="copy: Shallow and deep copy operations."><code class="xref py py-mod docutils literal"><span class="pre">copy</span></code></a>模块在酸洗/复制这些对象时使用这些函数。</span><span class="yiyi-st" id="yiyi-14">模块提供有关不是类的对象构造函数的配置信息。</span><span class="yiyi-st" id="yiyi-15">这种构造函数可以是工厂函数或类实例。</span></p><dl class="function"><dt id="copyreg.constructor"><span class="yiyi-st" id="yiyi-16"> <code class="descclassname">copyreg.</code><code class="descname">constructor</code><span class="sig-paren">(</span><em>object</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-17"><em>对象</em>声明为有效的构造函数。</span><span class="yiyi-st" id="yiyi-18">如果<em>对象</em>不可调用(因此无法作为构造函数),则引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span></p></dd></dl><dl class="function"><dt id="copyreg.pickle"><span class="yiyi-st" id="yiyi-19"> <code class="descclassname">copyreg.</code><code class="descname">pickle</code><span class="sig-paren">(</span><em>type</em>, <em>function</em>, <em>constructor=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-20">声明<em>函数</em>应用作类型<em>类型</em>的对象的“缩减”函数。</span><span class="yiyi-st" id="yiyi-21"><em>函数</em>应返回一个包含两个或三个元素的字符串或元组。</span></p><p><span class="yiyi-st" id="yiyi-22">如果提供的话,可选的<em>构造函数</em>参数是一个可调用对象,可以用于在使用由<em>函数</em>返回的参数元组调用时重建对象。</span><span class="yiyi-st" id="yiyi-23">如果<em>对象</em>是类或<em>构造函数</em>不可调用,则会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-24">有关<em>函数</em><em>构造函数</em>的预期接口的更多详细信息,请参见<a class="reference internal" href="pickle.html#module-pickle" title="pickle: Convert Python objects to streams of bytes and back."><code class="xref py py-mod docutils literal"><span class="pre">pickle</span></code></a>模块。</span><span class="yiyi-st" id="yiyi-25">注意pickler对象或<a class="reference internal" href="pickle.html#pickle.Pickler" title="pickle.Pickler"><code class="xref py py-class docutils literal"><span class="pre">pickle.Pickler</span></code></a>的子类的<a class="reference internal" href="pickle.html#pickle.Pickler.dispatch_table" title="pickle.Pickler.dispatch_table"><code class="xref py py-attr docutils literal"><span class="pre">dispatch_table</span></code></a>属性也可以用于声明reduce函数。</span></p></dd></dl><div class="section" id="example"><h2><span class="yiyi-st" id="yiyi-26">12.2.1. </span><span class="yiyi-st" id="yiyi-27">示例</span></h2><p><span class="yiyi-st" id="yiyi-28">下面的示例想要显示如何注册pickle函数以及如何使用它</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">copyreg</span><span class="o">,</span> <span class="nn">copy</span><span class="o">,</span> <span class="nn">pickle</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">C</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">):</span>
<span class="gp">... </span> <span class="bp">self</span><span class="o">.</span><span class="n">a</span> <span class="o">=</span> <span class="n">a</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">pickle_c</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
<span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="s2">"pickling a C instance..."</span><span class="p">)</span>
<span class="gp">... </span> <span class="k">return</span> <span class="n">C</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">a</span><span class="p">,)</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">copyreg</span><span class="o">.</span><span class="n">pickle</span><span class="p">(</span><span class="n">C</span><span class="p">,</span> <span class="n">pickle_c</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span> <span class="o">=</span> <span class="n">C</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="go">pickling a C instance...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">p</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="go">pickling a C instance...</span>
</code></pre></div></div></div>