在python中访问嵌套类(循环引用?)

时间:2012-05-22 18:36:52

标签: python sql class nested parent-child

我正在创建一个python脚本来从sqlite数据库中提取数据以获取网络路径。 我有两个类:node,link:

    class node:
        nodeName = str()
        nodeType = str()
        node1 = str()
        node2 = str()
        active = 0

        def __init__(self, nodeID):
            self.nodeID = nodeID
            cursor = network.execute("SELECT linkID FROM link WHERE nodeA = ? OR nodeB = ?", (nodeID, nodeID,))
            row1 = cursor.fetchone()
            row2 = cursor.fetchone()
            if row1:
                self.link1 = link(row1[0])
            if row2:
                self.link2 = link(row2[0])
            self.nodeName, selfsnodeType, self.active = network.execute("SELECT nodeName, nodeType, active FROM node WHERE nodeID = ?", (nodeID,)).fetchall()[0]

链接完全相同,只是它试图获得两个节点子节点。正如你所看到的,这创建了一个循环引用,但似乎有三层深,链接子节点不会获得自己的节点子节点,而节点子节点不会获得链接子节点。尝试读取值返回无类型:

NODE object 67 getting link children:
(19,)
(48,)
link object 19 getting node childs:
(67,)
(112,)
NODE object 67 getting link children:
None
None
  • 这是设计的行为吗?
  • 这是个坏主意吗?
  • 是否有可能遍历孩子?

1 个答案:

答案 0 :(得分:1)

是的,这是糟糕的设计。

您只需存储边缘即可构建图表。因此,您应该通过从数据库中提取边来构建图形。

之后,或同时,您应该提取装饰节点所需的信息(如果您修饰边缘,则需要边缘)。这不应该触发任何从数据库中提取边缘信息(装饰信息除外)的尝试。