所以当我意识到我需要一个类的特定实例以供所有其他实例使用时,我正在敲打一段有趣的代码。
我决定使它成为类的静态成员,而不是创建全局变量(本质上是不好的)。这是一个例子:
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来保存要使用的属性。
输出:
<__main__.Node object at 0x7ff22cd0c278>
<__main__.Node object at 0x7ff22cd0c278>