如何使Python Decorator在导入时不运行

Hig*_*ler 5 python

我已经用Python装饰了一个方法。当我导入包含该方法的模块时,装饰器会自动运行。

我意识到这是装饰器的制作方法,但是有没有办法让装饰器不这样做呢?

Eva*_*van 5

听起来您想要做的是选择在运行时应用什么装饰器。像这样的事情可能会起作用:

to_decorate = []

def decorate_later(func):
    to_decorate.append(func)
    return func

@decorate_later
def do_stuff(*args, **kw):
    print('I am doing stuff')
@decorate_later
def do_more_stuff(*args, **kw):
    print('Even more stuff')

def apply_decorator(decorator):
    for func in to_decorate:
        globals()[func.func_name] = decorator(func)
Run Code Online (Sandbox Code Playgroud)

然后您可以导入该模块,所有功能将正常定义。 decorate_later返回未修改的原始函数。您可以调用apply_decorator()将指定的装饰器应用于模块中注册的所有函数@decorate_later