如何解决在装饰方法中重新启动装饰器的参数
假设您有一个装饰器,它接受一个参数作为输入 decor(N)
。
此装饰器用于装饰模块 funcs.py
# funcs.py
@decor(N=10)
def testMethod():
# do something
return something
这个 funcs.py
模块现在被导入到 main.py
中,其中 testMethod
被调用。
# main.py
import funcs as funcs
funcs.testMethod()
问题:如何从 `main.py' 更改 N
?
我的尝试是将 N
设置为 funcs.py
的属性,但是当我尝试在 funcs.N = 20
中更改此属性 main.py
时,funcs.testMethod
运行N=10
。
解决方法
我的解决方法是这样的。我从装饰器中删除了参数,并将其作为 main.py
# funcs.py
N=10
def decor(function):
def run_function_for_some_N(*args,**kwargs):
if N == 10:
print(f'N = {N}. Run testMethod ')
return function(*args,**kwargs)
else:
print('N != 10. Will not run testMethod')
return run_function_for_some_N
@decor
def testMethod():
print('hello world')
我现在可以将 N
改为 main.py
# main.py
import funcs as funcs
for funcs.N in [10,11]:
funcs.testMethod()
输出
N = 10. Run testMethod
hello world
N != 10. Will not run testMethod
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。