# How? > [T]he "separation of concerns", which, even if not perfectly possible, is yet the only available technique for effective ordering of one's thoughts... is being one- and multiple-track minded simultaneously. — Edsger Dijkstra[1] Like a homicidal psycho jungle cat, `xattree` claws itself into your `attrs` object model at import time. There it remains like toxoplasmosis until runtime, at which point it consumes the soul (`__dict__`) of unsuspecting instances and substitutes itself (an `xarray.DataTree`). ```{mermaid} sequenceDiagram Note over caller: initialize caller->>host: __init__() Note over host,__dict__: attrs-generated initialization host->>__dict__: [populates] create participant DataTree Note over host,DataTree: xarray data tree initialization host->>DataTree: [creates] __dict__->>DataTree: [transfers everything to] opt host-->>parent: [bind parent] DataTree<<-->>parent: [bind data trees,
align dimensions] end DataTree->>host: [return] Note over host,DataTree: (__dict__ now mostly empty,
node's dimensions aligned) host->>caller: [return] Note over caller: get variable caller->>host: .x Note over host,DataTree: override __getattr__ alt is array host->>DataTree: .data["x"] else is dimension host->>DataTree: .data.dims["x"] else is scalar host->>DataTree: .data.attrs["x"] end DataTree->>host: [return value] host->>caller: [return value] Note over caller: set variable caller->>host: .x = ... Note over host,DataTree: override __setattr__ alt is array host->>DataTree: .data["x"] = ... DataTree->>DataTree: [check dimensions] else is scalar host->>DataTree: .data.attrs["x"] = ... end DataTree->>host: [return] host->>caller: [return] ``` [1]: https://www.cs.utexas.edu/~EWD/transcriptions/EWD04xx/EWD447.html