【发布时间】:2012-01-31 23:33:41
【问题描述】:
取以下代码:
import something
def Foo():
something = something.SomeClass()
return something
...这显然不是有效的代码:
UnboundLocalError: local variable 'something' referenced before assignment
...因为局部变量 something 在评估 = 的 RHS 之前已创建但未分配。 (例如,请参阅this related answer's comment。)这对我来说似乎有点奇怪,但可以肯定的是,我会接受的。现在,为什么下面的代码是有效的?
class Foo(object):
something = something.SomeClass()
我的理解是 class 定义的内部本质上是一个范围:
然后使用新创建的本地命名空间和原始全局命名空间在新的执行框架中执行该类的套件(请参阅命名和绑定部分)。
那么,为什么该代码的行为与函数的行为不同?
【问题讨论】:
-
something好像不止一个意思? -
@Johnsyweb:是的,有点。但在这两种情况下,它都具有相同的多于一个含义。 (或者,至少,我读过的所有文档似乎都这么说。)