在节点树中,父级.addChild(self)正在将self添加到s

2024-06-01 20:47:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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方法(应该为父类调用,而不是为当前正在构造的节点调用):

^{pr2}$

输出如下:

foo []
foo [foo]

这两行输出应该是相同的,因为它们之间的代码行应该只影响父节点,而不是当前正在构建的节点。在

我做错什么了?在


Tags: 方法selfnoneif节点fooinitdef
2条回答

在类级别初始化子级时,类的每个实例最终共享同一个列表对象。在

>>> class C:
...  children = []
... 
>>> a = C()
>>> b = C()
>>> id(a.children)
144349644
>>> id(b.children)
144349644

请尝试在构造函数中初始化它:

^{pr2}$

我怀疑children在所有节点对象之间共享;我们看不到声明,所以我不能确切地说你做错了什么。在

相关问题 更多 >