【问题标题】:Why can't a class's static variable be an instance of the class?为什么类的静态变量不能是类的实例?
【发布时间】:2020-09-29 03:26:52
【问题描述】:

所以当我意识到我需要一个类的特定实例以供所有其他实例使用时,我正在敲出一段代码来搞笑。

我决定将其设为类的静态成员,而不是创建一个全局变量(本质上是不好的)。这是一个例子:

class Node:
    nod = Node()
    def __init__(self):
        pass

n = Node()

print(n)
print(Node.nod)

这不会运行!我明白了:

NameError: name 'Node' is not defined

什么?为什么我不能?我可以这样做:

class Node:
    def __init__(self):
        self.nod = Node()

n = Node()

print(n)
print(Node.nod)

虽然我没有包含导致代码递归到 RecursionError 的停止条件,但代码仍然可以识别 Node() 构造函数的样子。

有人想插话这种奇怪的行为吗?

【问题讨论】:

  • Node() 在您定义 Node() 之前不会被定义。您正在尝试在定义它的地方使用它。
  • 只需将初始化移出类声明并使用此全局变量。

标签: python class constructor static


【解决方案1】:

Node 需要在使用前定义。

您可以像这样“修复”这个问题:

class Node:
    nod = None
    def __init__(self):
        Node.nod = Node.nod or self

n = Node()   # you need this before accessing Node.nod

print(n)
print(Node.nod)

但是对我来说是“闻起来”——为什么你需要 Node 的“实例”——而不是使用 Node 来保存要使用的属性。

输出:

<__main__.Node object at 0x7ff22cd0c278>
<__main__.Node object at 0x7ff22cd0c278>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2021-09-14
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多