在节点树中,parent.addChild(self)将self添加到自我
我正在用Python构建一个简单的节点树。但是当我的构造函数试图把当前节点添加为某个父节点的子节点时,当前节点也会把自己添加为自己的子节点。
这是我的构造函数方法(以及children
的创建):
children = []
def __init__(self, parent=None, tag="[ROOT]", attrs=None):
self.parent = parent
self.tag = tag
self.attrs = attrs
print "\n", "self:%s ... children:%s" % (self.tag, self.children)
if parent != None:
parent.addChild(self)
print "self:%s ... children:%s" % (self.tag, self.children)
这是我在同一个类中的addChild方法(这个方法应该是为父节点调用的,而不是当前正在构建的节点):
def addChild(self, child):
self.children.append(child)
这是输出结果:
foo []
foo [foo]
这两行输出应该是相同的,因为它们之间的代码只应该影响父节点,而不应该影响当前正在构建的节点。
我哪里做错了?
2 个回答
4
当你在类的层级上初始化子对象时,你的每个类实例都会共享同一个列表对象。
>>> class C:
... children = []
...
>>> a = C()
>>> b = C()
>>> id(a.children)
144349644
>>> id(b.children)
144349644
试着在你的构造函数里初始化它:
def __init__(self, parent=None, tag="[ROOT]", attrs=None):
self.children = []
0
我怀疑你们的 children
可能在所有的节点对象之间是共享的;因为我们看不到它的声明,所以我不能确切地说你哪里做错了。