据我了解,函数和类作用域的行为几乎相同:
>>> def x():
... a = 123
... print (locals())
...
>>> x()
{'a': 123}
>>> class x():
... a = 123
... print (locals())
...
{'a': 123, '__module__': '__main__'}
然而,当我定义一个闭包时,行为是不同的。正如预期的那样,函数只是返回本地绑定:
>>> def x():
... a = 123
... t = lambda: a
... return t
...
>>> x()()
123
而在一个类中,绑定似乎丢失了:
>>> class x():
... a = 123
... t = lambda self: a
...
>>> x().t()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in <lambda>
NameError: global name 'a' is not defined
谁能解释这种差异?