繁体   English   中英

为什么类的 static 变量不能是 class 的实例?

[英]Why can't a class's static variable be an instance of the class?

因此,当我意识到我需要一个 class 的特定实例可供所有其他实例使用时,我正在敲出一段有趣的代码。

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

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在使用前需要定义。

您可以像这样“修复”它:

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 来保存要使用的属性。

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM