2016-01-20 2 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), но это кажется искаженным. Есть ли способ лучше?find self index для вложенного объекта 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

Смежные вопросы