擅长:python、mysql、java
<p>我不清楚你到底想用这个设计做什么,因此,这是不是个好主意。考虑一下这是否是正确的方法。在</p>
<p>不过,我认为这符合你的要求。一个公共对象(在本例中命名为<code>auto_refresh</code>)由所有的“decorated”方法共享,并且该对象保留一个关于调用堆栈深度的计数器。在</p>
<p>这不是线程安全的。在</p>
<pre><code>class AutoRefresh(object):
nesting = 0
def __call__(self, f):
def wrapper(*args, **kwargs):
return self.proxied_call(f, args, kwargs)
return wrapper
def refresh(self):
print 'refresh'
def proxied_call(self, func, args, kwargs):
self.nesting += 1
result = func(*args, **kwargs)
self.nesting -= 1
if self.nesting == 0:
self.refresh()
return result
auto_refresh = AutoRefresh()
</code></pre>
<p>测试方法:</p>
^{pr2}$
<p>导致:</p>
<pre><code>In a
refresh
-
In b
In a
refresh
</code></pre>