是否可以将导入模块中的代码应用到导入模块的模块中?例如,我有模块Debug,其中定义了一些用于调试的装饰器,例如:
def debug_func(f):
def wrapper(*func_args, **func_kwargs):
print(f(*func_args, **func_kwargs))
return wrapper
Run Code Online (Sandbox Code Playgroud)
这个想法是什么:如果我可以的话,这将是有用的
import Debug
Run Code Online (Sandbox Code Playgroud)
并且当前模块的所有函数都将包含装饰器.可能吗?
在 Debug.py 中:
import functools
from types import FunctionType
def wrap_functions(module_dict):
for k, f in module_dict.items():
if not isinstance(f, FunctionType):
continue
def get_wrapper(f):
def wrapper(*func_args, **func_kwargs):
print(f(*func_args, **func_kwargs))
return functools.wraps(f)(wrapper)
module_dict[k] = get_wrapper(f)
Run Code Online (Sandbox Code Playgroud)
在您希望调试的模块底部:
import Debug
Debug.wrap_functions(globals())
Run Code Online (Sandbox Code Playgroud)
感谢 (+1) 所有提供建议的评论者。