我已经用Python装饰了一个方法。当我导入包含该方法的模块时,装饰器会自动运行。
我意识到这是装饰器的制作方法,但是有没有办法让装饰器不这样做呢?
听起来您想要做的是选择在运行时应用什么装饰器。像这样的事情可能会起作用:
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
| 归档时间: |
|
| 查看次数: |
1200 次 |
| 最近记录: |