0

オブジェクトが 1 つの親と多くの子を持つことができる階層として、いくつかのデータを表す必要があります。また、子供と同じ方法で子供の親を取得できる必要があります。

私はこれを試しました

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属性を与えることで、物事をもう少し面白くすることもできます。そうすれば、 はNodeより多くの を親にすることができNodeます。きちんとした。

ここにはいくつかの欠点があります (主に循環参照)。それを避けたい場合は、weakref.refs を使用して子/親への参照を保存できますが、必要に応じて別の質問に任せます。

于 2012-08-16T00:56:27.203 に答える