擅长:python、mysql、java
<p>我们可以疯狂地利用这样一个事实:<code>__enter__</code>和<code>__exit__</code>都只是方法,它们是在原始对象(不是<code>__enter__</code>返回的对象)中调用的:</p>
<pre><code>class WrapperContext:
def __init__(self, condition):
if condition:
self.real_context = ContextA()
else:
self.real_context = ContextB()
def __enter__(self):
return self.real_context.__enter__()
def __exit__(self):
return self.real_context.__exit__()
</code></pre>
<p>像这样使用:</p>
<pre><code> with WrapperContext(condition) as obj:
</code></pre>