<p>有关详细信息,请参见<code>__del__()</code>(<a href="https://docs.python.org/3/reference/datamodel.html#object.__del__" rel="nofollow noreferrer">here</a>)的文档:</p>
<blockquote>
<p>Note <code>del x</code> doesn’t directly call <code>x.__del__()</code> — the former decrements the reference count for <code>x</code> by one, and the latter is only called when <code>x</code>’s reference count reaches zero.</p>
</blockquote>
<p>如果您试图“解构”一个Python对象(注意我在引号中是怎么说的),我建议您使用<code>__exit__()</code>和<code>with</code>语句(docs<a href="https://docs.python.org/3/reference/datamodel.html#object.__exit__" rel="nofollow noreferrer">here</a>)</p>
<p>要使用<code>with</code>语句,请使用以下方法定义一个类:</p>
<pre class="lang-py prettyprint-override"><code>def __enter__(self)
def __exit__(self, exc_type, exc_value, traceback)
</code></pre>
<p>下面是一个简单的例子:</p>
<pre class="lang-py prettyprint-override"><code>class Bar:
def __init__(self, *args):
self.stack = list(args)
def __enter__(self):
# Example computation here.
filtered = filter(lambda x: isinstance(x, str), self.stack)
return list(filtered)
def __exit__(self, exc_type, exc_value, traceback):
del self.stack
# Once you leave the 'with' statement, this Bar() object will be deleted for good.
with Bar("Hello", "World!", 1, 2) as stack:
print(stack)
</code></pre>
<p>尽管坦率地说,在Python中“解构”一个对象几乎是不需要的,而且在大多数情况下,编程时应该避免尝试执行<a href="https://docs.python.org/3/library/gc.html" rel="nofollow noreferrer">garbage collector</a>的工作。使用<code>del</code>是一回事,但尝试“解构”对象是另一回事</p>