对象数组,奇怪的交互错误

时间:2018-03-11 10:07:11

标签: python

我想创建一个简单的图表类,我存储节点,每个节点存储其邻居。 但是当我进行intrate时,我只返回<class '__main__.Node'>个对象,我可以访问Node类的任何方法(如__str__)。

class Node(object):
    def __init__(self, Node_arr=None):
        self.name = None
        if Node_arr == None:
            Node_arr = []
        self.__Node_arr = Node_arr

    def add_vertex(self, node):
        #if node not in self.__Node_arr:
        self.__Node_arr.append(Node)

    def get_nachbarn(self):
        return self.__Node_arr

    def set_name(self, name):
        self.name = name

    def __str__(self):
        return self.name

class Graph2(object):

    def __init__(self, n, Node_arr=None):
        if Node_arr == None:
            Node_arr = []
            for i in range(n):
                c1 = Node()
                c1.set_name(str(i))
                Node_arr.append(c1)

        self.__Node_arr = Node_arr

    def add_vertex(self, node):
        self.__Node_arr.append(node)

    def add_edge(self, edge1, edge2):       
        v1 = self.__Node_arr[edge1]
        v2 = self.__Node_arr[edge2]

        v1.add_vertex(v2)
        v2.add_vertex(v1)

    def __str__(self):
        res = ""

        for k in self.__Node_arr:
            res += "Kanten von "+str(k) + " nach\n"

            for j in k.get_nachbarn():
                res += str(j)+" "

            res += "\n"

        return res  

if __name__ == "__main__":  
    g = Graph2(5)
    g.add_edge(0,1)

    print(g)

输出是:

Kanten von 0 nach
<class '__main__.Node'>
Kanten von 1 nach
<class '__main__.Node'>
Kanten von 2 nach

Kanten von 3 nach

Kanten von 4 nach

但应该是:

Kanten von 0 nach
1
Kanten von 1 nach
0
Kanten von 2 nach

Kanten von 3 nach

Kanten von 4 nach

1 个答案:

答案 0 :(得分:1)

class Node(object):
    def add_vertex(self, node):
        #if node not in self.__Node_arr:
        self.__Node_arr.append(Node)

您正在保存课程Node,而不是其实例node