<p>你有这样的课程,我想:</p>
<pre><code>class proc(object):
def __init__(self, value):
self.value = value
</code></pre>
<p>当你初始化你的第一个实例时,你写下:</p>
^{pr2}$
<p>这将随机数存储在<code>temp.value</code>。在</p>
<p>要制作副本,只需将<code>temp.value</code>传递给<code>proc</code>构造函数:</p>
<pre><code>dupe = proc(temp.value)
</code></pre>
<p>您也可以编写类来自动执行此操作,这样当您将<code>proc</code>的实例传递给<code>proc</code>构造函数时,它会生成一个副本(与其他类型一样,例如<code>list</code>和{<cd7>},它们的构造函数可以用来制作它们的副本)。这样做的好处是保留了类</em>中复制<em>需要做什么的所有知识,而不是调用方需要知道数据存储在哪里。在</p>
<pre><code>class proc(object):
def __init__(self, value):
if isinstance(value, proc):
value = value.value
self.value = value
</code></pre>
<p>现在,你可以写下:</p>
<pre><code>dupe = proc(temp)
</code></pre>
<p>或者,您可以向<code>proc</code>添加一个方法来制作副本:</p>
<pre><code>class proc(object):
def __init__(self, value):
self.value = value
def copy(self):
return type(self)(self.value)
</code></pre>
<p>现在你的副本是:</p>
<pre><code>dupe = temp.copy()
</code></pre>
<p>最后,如果您将<code>copy</code>方法命名为<code>__copy__</code>(或同时使用这两个名称),<em>它将神奇地与<code>copy.copy</code>一起工作!</em></p>
<pre><code>class proc(object):
def __init__(self, value):
self.value = value
def copy(self):
return type(self)(self.value)
__copy__ = copy # alias for use by 'copy' module
temp = proc(random.randint(min, max))
dupe = copy.copy(temp)
</code></pre>