【问题标题】:Why can't I access the class in its own definition? [duplicate]为什么我不能访问自己定义的类? [复制]
【发布时间】:2019-09-07 02:20:47
【问题描述】:

为什么下面的简单代码不起作用?

class A:
    a = A()

print(A.a)

我得到的错误是:

NameError: name 'A' is not defined

【问题讨论】:

    标签: python class


    【解决方案1】:

    因为在类定义完成之前,类 A 不会附加到命名空间中的名称 A(在 python 中由 dedent 表示)。但是,您可以将变量绑定到类,使用

    class A:
        pass
    A.a = A()
    print(A.a)
    

    因为在第 3 行,名称 A 存在并指向类,而在第 2 行不存在。

    【讨论】:

    • 如果您想将我的代码从字面上复制并粘贴到您的答案中,您至少应该提及我的名字。
    • 我实际上是先写了完全相同的东西,然后对其进行了编辑以详细说明我的解释。此外,很可能我们的两个答案都与这里的另一个问题重复。
    • 我明白了。发生。那就不用担心了。我确实看到您先发布了错误的答案然后将其删除,然后在我给出答案后对其进行编辑然后取消删除,这就是我问的原因。
    【解决方案2】:

    您不能在其自己的定义中引用一个类,因为在执行其代码块之前,该类对象实际上并没有被实例化。

    您可以改为实例化类的对象,并在定义类后将其分配给类的类属性:

    class A:
        pass
    A.a = A()
    print(A.a)
    

    这个输出:

    <__main__.A object at 0x013C63B0>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-30
      • 2014-12-15
      • 1970-01-01
      • 2015-11-16
      • 2016-10-13
      • 2014-11-23
      • 2017-02-28
      • 1970-01-01
      相关资源
      最近更新 更多