我创建了一个简单的类来管理相关对象的树:
class node(object):
children = list([])
def __init__(self, ID, *children):
self.ID = ID
for c in children:
self.children.append(c)
def add(self, *children ):
for c in children:
self.children.append(c)
def __str__(self):
return self.ID
def __repr__(self):
print self.ID, len(self.children)
root = node('1')
root.add( node('1.1', node('1.1.1')),
node('1.2'))
for c in root.children:
print c
我得到了:
1.1.1
1.1
1.2
但是我期待的只有1.1和1.2。我的错是什么?
感谢, 梅德
答案 0 :(得分:3)
self.children
指的是node.children
,它是一个类变量。列表的所有实例之间只共享一个列表实例。
您需要将其设为实例变量:
class Node(object):
def __init__(self, id, *children):
self.children = []
此外,__str__
and __repr__
应返回遵循特定格式的字符串。
答案 1 :(得分:1)
将children = list([])
放在__init__
方法中,如下所示:
def __init__(self, ID, *children):
self.ID = ID
self.children = []
for c in children:
self.children.append(c)