我需要将一些数据表示为一个层次结构,其中一个对象可以有一个父项和多个子项。我还需要能够以与孩子相同的方式获得孩子的父母。
我试过这个
class Root():
def __init__(self):
self.child = Node(self)
class Node():
def __init__(self, parent):
self.parent = parent
有没有一种解决这个问题的常用方法
答案 0 :(得分:7)
我认为这基本上是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
属性,您可以使事情变得更有趣 - 然后Node
s可以为更多Node
提供更多内容。整齐。
这里有一些缺点(主要是循环引用)。如果你想避免这种情况,你可以使用weakref.ref
来存储对孩子/父母的引用,但如果有必要,我会将其推迟到另一个问题。