바탕 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__을 재정 의하여 부모를 재 할당 할 때 부모에서 자식으로 제거하도록 할 수도 있습니다. 이 패턴으로 멋진 물건이 많이 있습니다.