4

我在交互模式下输入以下代码:

class A:
    a=42
    def foo():
        nonlocal a

但我有一个SyntaxError: no binding for nonlocal 'a' found. 但我预计解析的结果nonlocal a将是 42,因为这个方法最近的封闭范围是一个类块。

4

2 回答 2

4

Python 以一种特殊的方式处理类作用域:当在渐近作用域中查找名称时,会跳过类作用域。

要从类范围访问名称,请使用self.a通过实例查找或A.a通过类查找。

请参阅类块中定义的名称范围不会扩展到方法块。这是为什么?了解这种行为的理由。

于 2014-02-28T13:45:08.507 回答
0

您正在做的是创建一个class具有类属性a,默认值为42. 您可以通过 引用该属性A.a。如果您想在课堂上使用它,请使用self.a.

于 2014-02-28T13:44:22.257 回答