微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在装饰方法中重新启动装饰器的参数

如何解决在装饰方法中重新启动装饰器的参数

假设您有一个装饰器,它接受一个参数作为输入 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 举报,一经查实,本站将立刻删除。