【发布时间】:2016-08-01 23:14:21
【问题描述】:
我想这样做(虚拟示例):
def func():
nonlocal var
print (var)
class A:
var = 'hola'
func()
但我得到:“SyntaxError: no binding for nonlocal 'var' found”
如果该方法被修饰,我真正打算做的是将方法名称附加到类范围内的列表中。像这样的:
def decorator(func):
nonlocal decorated
decorated.append(func.__name__)
return func
class A:
decorated = []
@decorate
def f(self):
pass
【问题讨论】:
-
nonlocal查看函数定义的范围,而不是函数调用。有多种方法可以查看函数调用的范围,但通常建议尽可能避免使用它们。尝试将列表作为参数提供给装饰器,或使用类装饰器对类进行后处理并设置decorated列表。
标签: python scope decorator python-nonlocal