python – 切换装饰器

什么是打开和关闭装饰器的最佳方法,而不是实际去每个装饰并将其评论出来?假设您有一个基准测试装饰器:

# 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
上一篇:为什么尝试通过Python属性设置“点”会导致无限递归?


下一篇:eclipse热部署配置