擅长:python、mysql、java
<p>下面是一个简单的上下文管理器,用于比较:</p>
<pre><code>class blocked(object):
def __init__(self, *targets):
self._targets = targets
def __enter__(self):
for target in self._targets:
target.blockSignals(True)
def __exit__(self, cls, exception, traceback):
for target in self._targets:
target.blockSignals(False)
</code></pre>
<p>下面是如何使用它:</p>
<pre><code>class Window(QtGui.QMainWindow):
...
def updateList(self, *args):
with blocked(self.list):
# do things with self.list
</code></pre>
<p>这样做的好处是<code>blocked</code>可以在<em>任何地方</em>使用,并且可以动态指定目标。也可以说它更可读,因为被阻塞的是<code>self.list</code>(信号发射器),而不是<code>self.updateList</code>。你知道吗</p>