def foo():
pass
def bar():
print 'good bay'
两个功能就像打击一样
现在我想在foo运行完成后运行bar函数
是否有类使用__del__
的方法?
正如我在课堂上的方法所知,我可以使用__del__
,如下所示:
class A(object):
def __init__(self):
pass
def __del__(self):
bar()
但我无法使用foo.__del__
还有其他方法吗?
答案 0 :(得分:3)
这就是装饰者的用途。此foo
上使用bar
作为参数的装饰器将在bar
之后运行foo
并仍然返回foo
的结果。它将适用于具有任意数量参数的函数。
def run_before(lastfunc, *args1, **kwargs1):
def run(func):
def wrapped_func(*args, **kwargs):
try:
result = func(*args, **kwargs)
except:
result = None
finally:
lastfunc(*args1, **kwargs1)
return result
return wrapped_func
return run
def bar():
print 'goodby'
@run_before(bar)
def foo():
print "hello"
foo()
编辑:添加了错误处理。谢谢@Björn
答案 1 :(得分:0)
为什么不:
foo()
bar()
如果您想要一些通用的方法,可以尝试:
def run_after(f_after):
def wrapper(f):
def wrapped(*args, **kwargs):
ret = f(*args, **kwargs)
f_after()
return ret
return wrapped
return wrapper
@run_after(bar)
def foo():
....
这种方式总是在foo执行后运行。