Доброго времени суток всем.

Помогите разобратся, мне кажется я не совсем правильно создаю последовательность, ну или еще чтото :)

вот код:
from itertools import chain

class cNode:
def __init__(self, name = "", attrs = {}):
self.name = name
self.attrs = attrs

def GetAttrs(self):
return self.attrs.keys()

def GetValue(self, attr):
value = None
try:
value = self.attrs[attr]
except KeyError:
pass

return value

class cTree:
class cData:
def __init__(self, data=None):
self.child = []
self.node = data

def __iter__(self):
#for nn in self.child:
# yield nn
for n in chain([self], *self.child):
yield n

def __init__(self):
self.data = cTree.cData()

def __iter__(self):
for n in self.data:
if isinstance(n.node, cNode):
yield n.node

def Append(self, parent, node):
temp = cTree.cData(node)

if parent is None:
self.data.child.append(temp)
else:
for n in self.data:
if n.node == parent:
n.child.append(temp)
break

tree = cTree()
node1 = cNode("root")
node2 = cNode("3")
node3 = cNode("4")
node4 = cNode("5")
node5 = cNode("1")
node6 = cNode("2")
node7 = cNode("10")
node8 = cNode("11")
node9 = cNode("12")

tree.Append(None, node1)
tree.Append(node1, node2)
tree.Append(node2, node3)
tree.Append(node2, node4)
tree.Append(node1, node5)
tree.Append(node1, node6)
tree.Append(node3, node7)
tree.Append(node3, node8)
tree.Append(node3, node9)

for tn in tree:
print tn.name
вывод программы:
root
3
4
10
11
12
5
1
2
Все замечательно работет если я использую дополнительно chain из itertools
for n in chain(, *self.child):
yield n
а если попытятся обойтись без этого и написать
for nn in self.child:
yield nn
то глубже 1го уровня я попасть немогу. Вот поэтому и есть ощющение - что последовательность кривая получается, а почему - понять немогу.

Всем спасибо.