擅长:python、mysql、java
<p>如果我理解正确,您的用例是这样的:</p>
<pre><code>b = B()
def reset_b():
global b
b = B() # drops the reference to b, so it (and b.A) should be garbage collected
def get_a():
return b.A
</code></pre>
<p>您关心的是,从<code>get_a</code>返回的保存的<code>A</code>引用在<code>b</code>重置后仍然有效。如果这是对的,那么弱引用可能是一种解决方法:</p>
<pre><code>import weakref
def get_a():
return weakref.proxy(b.A)
</code></pre>
<p>如果<code>proxy</code>对象是在它所引用的<code>b.A</code>对象被删除之后使用的,那么它将引发大多数操作的异常。你知道吗</p>
<p>我不确定这是一个好的设计,虽然。更好的解决方案可能是简单地记录<code>get_a</code>的结果不应该长期缓存。相反,每当需要新的引用时,应该再次调用它。这不需要任何复杂的引用方案或异常处理,而且更容易考虑和测试。你知道吗</p>