为什么类的静态变量不能成为该类的实例?

问题描述 投票:1回答:1

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

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

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()构造函数的外观。

有人想知道这种奇怪的行为吗?

python class constructor static
1个回答
0
投票

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>
© www.soinside.com 2019 - 2024. All rights reserved.