什么是打开和关闭装饰器的最佳方法,而不是实际去每个装饰并将其评论出来?假设您有一个基准测试装饰器:
# deco.py
def benchmark(func):
def decorator():
# fancy benchmarking
return decorator
在你的模块中,例如:
# mymodule.py
from deco import benchmark
class foo(object):
@benchmark
def f():
# code
@benchmark
def g():
# more code
这很好,但有时你不关心基准测试,也不想要开销.我一直在做以下事情.添加另一个装饰者:
# anothermodule.py
def noop(func):
# do nothing, just return the original function
return func
然后注释掉导入行并添加另一行:
# mymodule.py
#from deco import benchmark
from anothermodule import noop as benchmark
现在,基于每个文件切换基准测试,只需要更改相关模块中的import语句.可以独立控制各个装饰器.
有一个更好的方法吗?最好不要编辑源文件,并指定在其他地方使用哪些文件的装饰器.
解决方法:
您可以将条件添加到装饰器本身:
def benchmark(func):
if not <config.use_benchmark>:
return func
def decorator():
# fancy benchmarking
return decorator