gpt4 book ai didi

python - 装饰器名称错误

转载 作者:行者123 更新时间:2023-11-28 21:50:17 24 4
gpt4 key购买 nike

考虑这个简单的装饰器演示:

class DecoratorDemo():

def _decorator(f):
def w( self ) :
print( "now decorated")
f( self )
return w

@_decorator
def bar( self ) :
print ("the mundane")

d = DecoratorDemo()
d.bar()

运行它会得到预期的输出:

now decorated
the mundane

d.bar 的类型和 d._decorator确认为 <class 'method'>如果我将以下两行添加到上面代码的末尾。

print(type(d.bar))
print(type(d._decorator))

现在如果我修改上面的代码来定义bar定义 _decorator 之前的方法方法,我得到错误

     @_decorator
NameError: name '_decorator' is not defined

为什么在上述情况下方法的顺序是相关的?

最佳答案

因为被装饰的方法实际上并不是看起来的“方法声明”。 suger 隐藏的装饰器语法是这样的:

def bar( self ) :
print ("the mundane")
bar = _decorator(bar)

如果将这些行放在 _decorator 的定义之前,名称错误就不足为奇了。正如@Daniel Roseman 所说,类主体只是代码,从上到下执行。

关于python - 装饰器名称错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32096706/

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