擅长:python、mysql、java
<p>我不确定是否有一种方法可以得到你想要的语法,但这里有一个替代方法。你知道吗</p>
<p>只需向<code>fires()</code>修饰符添加一个附加参数,以确定它应该发生在以下时间之前还是之后:</p>
<pre><code>def fires(event, before=True):
"""
Returns a decorater that causes an `Event` to fire immediately before or
after the decorated function is called
"""
if before:
def decorator(f):
"""Fires the event before the function executes"""
@wraps(f)
def wrapped(*args, **kargs):
event.fire(*args, **kargs)
return f(*args, **kargs)
return wrapped
else:
def decorator(f):
"""Fires the event after the function executes"""
@wraps(f)
def wrapped(*args, **kargs):
result = f(*args, **kargs)
event.fire(*args, **kargs)
return result
return wrapped
return decorator
</code></pre>
<p>然后像这样使用:</p>
<pre><code>@fires(myEvent, before=False) # or before=True, defaults to True
def foo(y):
return y*y
</code></pre>