How can I decorate all functions imported from a file?
我已经创建了许多函数,这些函数被分为不同的文件,现在我想在不修改文件和不逐个应用装饰器的情况下,对所有函数应用相同的装饰器。
我试过使用Delnan编写的这个解释,但是导入函数没有成功。
关于decorator,它必须在每次用函数参数和值执行类中的函数时更新一个列表,就像我问的另一个问题一样。
有什么建议可以帮助我解决这个问题吗?谢谢
有点自省(
首先,我们迭代在模块中找到的所有名称,并检查看起来像函数的对象。在那之后,我们简单地用装饰过的函数重新分配旧函数。
MY.PY:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import types import functools def decorate_all_in_module(module, decorator): for name in dir(module): obj = getattr(module, name) if isinstance(obj, types.FunctionType): setattr(module, name, decorator(obj)) def my_decorator(f): @functools.wraps(f) def wrapper(*args, **kwargs): print(f) return f(*args, **kwargs) return wrapper import mymod1 decorate_all_in_module(mymod1, decorator) |
MyMOD1.PY:
1 2 3 4 5 6 | def f(x): print(x) def g(x, y): print(x + y) |
输出:
1 2 3 4 | <function f at 0x101e309d8> 2 <function g at 0x101e30a60> 7 |
如果您使用star imports(