mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 06:55:36 +08:00
16 lines
7.0 KiB
HTML
16 lines
7.0 KiB
HTML
<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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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> |