擅长:python、mysql、java
<p>类范围内的名称查找很奇怪,并且与文档不完全一致。在</p>
<p>通常,与函数作用域不同,类作用域中的名称查找都是相同的,不管作用域是否对名称赋值;首先是局部变量,然后是全局变量,然后是内建函数。然而,类作用域中的非局部查找会受到该类作用域中赋值的影响。在</p>
<p>如果你像</p>
<pre><code>def classMaker(x):
class y(object):
z=x # not x=x
return y
</code></pre>
<p>Python发现名称<code>x</code>与一个非局部变量匹配,它使用<code>LOAD_DEREF</code>操作码访问该变量的闭包单元。但是,实际代码中对<code>x</code>的赋值:</p>
^{pr2}$
<p>导致Python使用<code>LOAD_NAME</code>,这是类作用域名称查找的常用操作码,它看不到闭包变量。在</p>