0

我需要将一些数据表示为一个对象可以有一个父级和多个子级的层次结构。我还需要能够以与孩子相同的方式获得孩子的父母。

我试过这个

class Root():
    def __init__(self):
        self.child = Node(self)

class Node():
    def __init__(self, parent):
        self.parent = parent

有没有解决这个问题的通用方法

4

1 回答 1

8

我认为这基本上是如何Tkinter做到的:

class Root(object):
    def __init__(self):
        self.children = []

class Node(object):
   def __init__(self,parent):
        self.parent = parent
        parent.children.append(self)

现在,通过属性Root知道它的所有孩子children,孩子通过属性知道他们的父母parent

r = Root()
n = Node(r)
r.children[0] is n  #True
n.parent is r  #True

当然,你也可以通过给Node对象一个children属性来让事情变得更有趣——然后Nodes 可以成为更多 s 的父Node级。整洁的。

这里有一些缺点(主要是循环引用)。如果您想避免这种情况,您可以使用weakref.refs 来存储对孩子/父母的引用,但如有必要,我会将其推迟到另一个问题。

于 2012-08-16T00:56:27.203 回答