在Python中,类名何时绑定?也就是说,在没有得到"NameError"的情况下,我们什么时候/哪



Python文档说:

以下操作将失败:

class A:
a = 42
b = list(a + i for i in range(10))

我运行了它,它确实失败了:它抛出了NameError: name 'a' is not defined。因此,我尝试在list参数中使用A.a而不是a进行修复:

class A:
a = 42
b = list(A.a + i for i in range(10))

但这仍然没有奏效。它抛出NameError: name **'A'** is not defined

类名(在本例中为A标识符(何时绑定,以便我们可以引用它?我知道在A的方法中引用A是有效的,因为当Python进行解析时?类定义,它不执行类方法。例如,以下工作原理:

class A:
a = 42
# b = list(A.a + i for i in range(10))

def foo(self):
print(A)
@classmethod
def bar(cls):
print(A)
@staticmethod
def baz():
print(A)
a = A()
a.foo()
a.bar()
a.baz()

A在类定义块完成之前不会绑定。引用教程:

当一个类定义正常保留(通过末尾(时,就会创建一个类对象。这基本上是类定义创建的命名空间内容的包装;我们将在下一节中了解更多关于类对象的信息原始的本地作用域(在输入类定义之前生效的作用域(将恢复,并且类对象在此处绑定到类定义标头中给定的类名(示例中为ClassName(。

最新更新