上に構築さdefaultdictを使用して単一行の木で、上記の答えは、あなたはそれクラスにすることができます。これにより、コンストラクターでデフォルトを設定し、他の方法で構築することができます。
class Tree(defaultdict):
def __call__(self):
return Tree(self)
def __init__(self, parent):
self.parent = parent
self.default_factory = self
この例では、各ノードがツリー内の親を参照できるように、後方参照を作成できます。
>>> t = Tree(None)
>>> t[0][1][2] = 3
>>> t
defaultdict(defaultdict(..., {...}), {0: defaultdict(defaultdict(..., {...}), {1: defaultdict(defaultdict(..., {...}), {2: 3})})})
>>> t[0][1].parent
defaultdict(defaultdict(..., {...}), {1: defaultdict(defaultdict(..., {...}), {2: 3})})
>>> t2 = t[0][1]
>>> t2
defaultdict(defaultdict(..., {...}), {2: 3})
>>> t2[2]
3
次に、クラスTreeで__setattr__をオーバーライドして、親を再割り当てするときに、その親から子として削除することもできます。このパターンのクールなものがたくさん。