Source code for anytree.node.symlinknode
# -*- coding: utf-8 -*-
from .symlinknodemixin import SymlinkNodeMixin
from .util import _repr
[docs]class SymlinkNode(SymlinkNodeMixin):
def __init__(self, target, parent=None, children=None, **kwargs):
u"""
Tree node which references to another tree node.
Args:
target: Symbolic Link Target. Another tree node, which is refered to.
Keyword Args:
parent: Reference to parent node.
children: Iterable with child nodes.
*: Any other given attribute is just stored as attribute **in** `target`.
The :any:`SymlinkNode` has its own parent and its own child nodes.
All other attribute accesses are just forwarded to the target node.
>>> from anytree import SymlinkNode, Node, RenderTree
>>> root = Node("root")
>>> s1 = Node("sub1", parent=root, bar=17)
>>> l = SymlinkNode(s1, parent=root, baz=18)
>>> l0 = Node("l0", parent=l)
>>> print(RenderTree(root))
Node('/root')
├── Node('/root/sub1', bar=17, baz=18)
└── SymlinkNode(Node('/root/sub1', bar=17, baz=18))
└── Node('/root/sub1/l0')
Any modifications on the target node are also available on the linked node and vice-versa:
>>> s1.foo = 4
>>> s1.foo
4
>>> l.foo
4
>>> l.foo = 9
>>> s1.foo
9
>>> l.foo
9
"""
self.target = target
self.target.__dict__.update(kwargs)
self.parent = parent
if children:
self.children = children
def __repr__(self):
return _repr(self, [repr(self.target)], nameblacklist=("target", ))