【发布时间】:2019-09-07 02:20:47
【问题描述】:
为什么下面的简单代码不起作用?
class A:
a = A()
print(A.a)
我得到的错误是:
NameError: name 'A' is not defined
【问题讨论】:
为什么下面的简单代码不起作用?
class A:
a = A()
print(A.a)
我得到的错误是:
NameError: name 'A' is not defined
【问题讨论】:
因为在类定义完成之前,类 A 不会附加到命名空间中的名称 A(在 python 中由 dedent 表示)。但是,您可以将变量绑定到类,使用
class A:
pass
A.a = A()
print(A.a)
因为在第 3 行,名称 A 存在并指向类,而在第 2 行不存在。
【讨论】:
您不能在其自己的定义中引用一个类,因为在执行其代码块之前,该类对象实际上并没有被实例化。
您可以改为实例化类的对象,并在定义类后将其分配给类的类属性:
class A:
pass
A.a = A()
print(A.a)
这个输出:
<__main__.A object at 0x013C63B0>
【讨论】: