我在交互模式下输入以下代码:
class A:
a=42
def foo():
nonlocal a
但我有一个SyntaxError: no binding for nonlocal 'a' found
. 但我预计解析的结果nonlocal a
将是 42,因为这个方法最近的封闭范围是一个类块。
我在交互模式下输入以下代码:
class A:
a=42
def foo():
nonlocal a
但我有一个SyntaxError: no binding for nonlocal 'a' found
. 但我预计解析的结果nonlocal a
将是 42,因为这个方法最近的封闭范围是一个类块。
Python 以一种特殊的方式处理类作用域:当在渐近作用域中查找名称时,会跳过类作用域。
要从类范围访问名称,请使用self.a
通过实例查找或A.a
通过类查找。
请参阅类块中定义的名称范围不会扩展到方法块。这是为什么?了解这种行为的理由。
您正在做的是创建一个class
具有类属性a
,默认值为42
. 您可以通过 引用该属性A.a
。如果您想在课堂上使用它,请使用self.a
.