2016-01-20 52 views
0
class Node: 
    def __init__(self,parent = None): 
     self.parent = parent 
     self.children = [] 
    def AddNode(self): 
     self.children.append(Node(self)) 
    def getIndex(self): 
     return self.parent.children.index(self) 

a = Node() 
b = a.AddNode() 
print b.getIndex() 

在像上面那样的对象树中,孩子在父级孩子中找出其索引的最佳方式是什么?我正在使用self.parent.children.index(self),但似乎扭曲。有没有更好的办法?找到嵌套Python对象的自我索引

回答

1

一个尼特:这不太合适,因为AddNode不会返回任何东西。 除此之外,你已经做得很好。只要您按索引(懒惰)检索索引,就可以直接执行此操作。如果你想要更直接的东西,我建议你在AddNode链接孩子时存储索引。

class Node: 

    def __init__(self,parent = None): 
     self.parent = parent 
     self.children = [] 
     self.child_index = None 

    def AddNode(self): 
     new_child = Node(self) 
     self.children.append(new_child) 
     new_child.child_index = self.children.index(new_child) 
     return new_child 

    def getIndex(self): 
     return self.child_index 

a = Node() 
b = a.AddNode() 
c = a.AddNode() 
d = a.AddNode() 

print d.getIndex() 
print c.getIndex() 
print b.getIndex() 

输出(booooorrriiinnngg):

2 
1 
0 
+0

就确认我需要的,谢谢。是的,感谢提醒在AddNode()中返回一些内容。正如你可能已经猜到的那样,我真正的代码是这样做的,但我忘了在示例中添加它。干杯! – Adam

+0

很高兴能有所帮助。记住当你点击一个节奏点时“接受”一个答案:它可以让StackOverflow正确地解决问题。 – Prune