【问题标题】:Python Error "name 'A' is not defined" in class variable initialization类变量初始化中的Python错误“名称'A'未定义”
【发布时间】:2022-01-25 22:06:18
【问题描述】:

此代码在 python 命令行中工作。但是,在模块中编译它时会出现以下错误:“未定义名称'A'。”

>>> class A:
...     a = 2
...     c = A.a
... 
>>> A.c
2
class A:
    a = 2
    c = A.a

NameError: name 'A' is not defined

我找到了更好的解决方案。如下所示,一个静态变量可用于另一个静态变量的初始化。下面的代码编译得很好。

class A:
    a = 2
    b = a

c = A()
print(c.b)

【问题讨论】:

  • 名称 A 直到 class 块完成后才定义。所以在定义类时不能引用它。
  • 我怀疑在您的交互式会话中您之前定义了 A 类。所以你使用的是A.a 的旧值。
  • 好的,有道理。但是,为什么它可以在命令行中工作?
  • @Barmar 谢谢。你是对的。我重置了我的命令行,然后它产生了同样的错误。

标签: python variables static


【解决方案1】:

这是 b/c class 还没有定义,所以你必须把 c = A.a 放在类之外,或者你可以这样做:

 class A:
     a = 2
 c = A.a
 print(c)

输出:

2

或者,正如@Barman 回答的那样,您也可以这样做:

 class A:
     a = 2
 A.c = A.a
 print(A.c)

输出:

2

【讨论】:

  • A.c = A.a 做他想做的事。
  • @Barmar 雅,我现在明白了。我需要定义一个类变量而不初始化它。然后,如果我想使用其他类变量来分配给这个类变量,我可以稍后在我的代码中使用这样的类名:A.b = A.a.
猜你喜欢
  • 2019-01-21
  • 2018-08-26
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多