考虑一下这个简单的decorator演示:
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()
运行此命令可获得预期输出:
^{pr2}$如果我在上面的代码末尾添加以下两行,d.bar
和{<class 'method'>
。在
print(type(d.bar))
print(type(d._decorator))
现在,如果我在定义_decorator
方法之前修改上面的代码来定义bar
方法,就会得到错误
@_decorator
NameError: name '_decorator' is not defined
为什么上面的排序是相关的?在
因为修饰的方法实际上并不像看上去那样是一个“方法声明”。decorator语法suger隐藏的是:
如果将这些行放在
_decorator
的定义之前,那么名称错误就不会令人惊讶了。就像@Daniel Roseman所说的,类主体只是代码,是自上而下执行的。在相关问题 更多 >
编程相关推荐