Python nonlocal statement in a class definition
我试图在python 3源代码中对作用域进行一些分析,我一直在研究非本地语句在类定义中的工作方式。
据我所知,类定义在一个新的名称空间(称为dict)内执行其主体,并将类名绑定到类型(name、base、dict)的结果。只要非局部X引用一个在封闭的非局部范围内绑定的变量,它就应该工作。
因此,我希望编译并运行以下代码:
1 2 3 4 5 | class A: v = 1 class B: nonlocal v v = 2 |
但这失败了
1 | SyntaxError: no binding for nonlocal 'v' found |
以下代码运行良好
1 2 3 4 5 | def A(): v = 1 class B: nonlocal v v = 2 |
这里有人能解释函数定义的闭包和类定义之间的区别吗?
词法范围仅适用于函数命名空间,否则类内定义的方法将能够"查看"类级属性(通过设计,这些属性必须作为方法内
同样的限制也会导致类级变量被方法的引用跳过,从而使
python处理类和函数定义有很大的不同。例如,您的