gpt4 book ai didi

python - 将装饰器列表应用于可调用对象?

转载 作者:太空狗 更新时间:2023-10-30 01:47:16 25 4
gpt4 key购买 nike

给定一系列装饰器方法,如何将它们应用于可调用对象?

例如,因为:

@foo
@bar
def baz():
pass

...等同于:

def baz():
pass
baz = foo(bar(baz)))

...人们会假设使用装饰器列表 ([foo, bar]),它们可以动态应用于 baz

最佳答案

还有另一个装饰器!

def yad(decorators):
def decorator(f):
for d in reversed(decorators):
f = d(f)
return f
return decorator

示例用法

 list_of_decorators = [foo, bar]

@yad(list_of_decorators)
def foo():
print 'foo'

如果没有装饰器语法,它看起来像

 func = yad(list_of_decorators)(func)

如果你想将同一个列表应用到多个函数,你可以这样做:

 dec = yad(list_of_decorators)

func1 = dec(func1)

@dec
def func2():
pass

正如 recursive 在评论中指出的那样,您可以定义 yad(我确定有一个更好的名称)来接受 *decorators 而不是 装饰器。然后,如果您就地 创建列表,则不必使用括号。如果列表是在别处创建的,我所演示的方法会更好。

关于python - 将装饰器列表应用于可调用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122815/

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