我正在實現一個圖形結構(僅用於練習目的),現在我來到了兩個我無法向自己解釋的行爲。Python圖形結構和令人驚訝的列表處理
首先,這裏的代碼
class Node:
data = None
def __init__(self, data):
self.data = data
def __str__(self):
return str(self.data)
def __repr__(self):
return self.__str__()
class GraphNode(Node):
children = []
def __init__(self, list_of_nodes=None, data=None):
if list_of_nodes != None:
for node in list_of_nodes:
children.add(node)
self.data = data
def createGraphStructure():
node1 = GraphNode(data=1)
node2 = GraphNode(data=2)
node3 = GraphNode(data=3)
node4 = GraphNode(data=4)
node5 = GraphNode(data=5)
node6 = GraphNode(data=6)
node7 = GraphNode(data=7)
node8 = GraphNode(data=8)
node1.children.append([node2, node3, node4])
node2.children.append([node5, node6, node7])
node4.children.append([node8])
#just a random test/visualization
print node1.children
#another random printout to test/visualize
for n in node1.children:
print n.data
return node1
if __name__ == "__main__":
root = createGraphStructure()
#do stuff with graph, bfs dfs whatever
現在首先令人吃驚的事情: print node1.children
在createGraphStructure()
會打印出以下幾點:[[2, 3, 4], [5, 6, 7], [8]]
,但我希望它只是打印出節點1的直接孩子,像[2, 3, 4]
。我在這裏完全無能爲力。
其次,部分
for n in node1.children:
print n.data
拋出以下異常:
File "C:/yeah/you/would/like/to/see/my/path/right?/datastructures.py", line 54, in createGraphStructure
print n.data
AttributeError: 'list' object has no attribute 'data'
,因爲它似乎,n
是一個列表,但是爲什麼呢?不應該從列表中的節點? 我確定有一些明顯的解釋,但我無法弄清楚。另外,因爲我不太熟悉Python,尤其是不是OO。
Thx!