gpt4 book ai didi

python - 在两个 python 装饰器之间传递变量

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:39 25 4
gpt4 key购买 nike

有没有办法在应用于同一函数的两个Python装饰器之间传递变量?目标是让其中一个装饰器知道另一个装饰器也被应用。我需要下面示例中的 decobar_present() 之类的东西:

def decobar(f):
def wrap():
return f() + "bar"
return wrap

def decofu(f):
def wrap():
print decobar_present() # Tells me whether decobar was also applied
return f() + "fu"
return wrap

@decofu
@decobar
def important_task():
return "abc"

更一般地说,我希望能够根据是否也应用了 decobar 来修改 decofu 的行为。

最佳答案

要在两个 python 装饰器之间传递变量,您可以使用装饰函数的关键字参数字典。只是不要忘记在从第二个装饰器中调用函数之前从那里弹出添加的参数。

    def decorator1(func):
def wrap(*args, **kwargs):
kwargs['cat_says'] = 'meow'
return func(*args, **kwargs)
return wrap

def decorator2(func):
def wrap(*args, **kwargs):
print(kwargs.pop('cat_says'))
return func(*args, **kwargs)
return wrap


class C:
@decorator1
@decorator2
def spam(self, a, b, c, d=0):
print("Hello, cat! What's your favourite number?")
return a + b + c + d

x=C()
print(x.spam(1, 2, 3, d=7))

关于python - 在两个 python 装饰器之间传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17748998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com