0

我有一个名为 的装饰器Timer,现在理想情况下,可以使用这样的装饰器:

@Timer
def function(...):
    return None

但是,这个调用 Timer一直 function被调用。现在,当您想在特定实例下调用它时,当然可以使用像普通函数一样的装饰器来执行此操作:

function = Timer(function)

然而,这看起来并不漂亮(我很挑剔,我知道)。那么,有没有办法将装饰器包装在一个函数上,以说明测试文件中的所有用例或其他东西?所以,像:

from app import cheese

@Timer  # Syntax error
cheese  # Syntax error

注意,它只使用这个特定文件的装饰器,而不是一直使用,如果你把它放在实际函数定义之上的话。

4

1 回答 1

1

如果您可以在文件顶部启用/禁用(即您知道何时加载文件是否要启用它们),则可以使用Enable/Disable Decorator

如果不是...您没有发布装饰器的源代码,但没有理由不能在包装代码本身中引用全局变量以启用/禁用。即装饰器看起来像这样:

@simple_decorator
def my_simple_logging_decorator(func):
    def you_will_never_see_this_name(*args, **kwargs):
        print 'calling {}'.format(func.__name__)
        return func(*args, **kwargs)
    return you_will_never_see_this_name

(来自https://wiki.python.org/moin/PythonDecoratorLibrary

只需为添加的代码添加一个防护,即

@simple_decorator
def my_simple_logging_decorator(func):
    def you_will_never_see_this_name(*args, **kwargs):
# Added/modified code starts here
        if globalvar:
            print 'calling {}'.format(func.__name__)
# End modified code
        return func(*args, **kwargs)
    return you_will_never_see_this_name
于 2013-10-03T13:01:02.123 回答