What is your issue?
In #9011 code from datatree was merged into the main xarray/core subdirectory. This includes the TreeAttrAccessMixin class, which is inherited by DataTree. There is also a more general AttrAccessMixin class, which would be preferable to use instead.
The reason that AttrAccessMixin is not just used for DataTree is that AttrAccessMixin.__init_subclass__ has a check to see if there is a __dict__ attribute on the class. If there is, an error is thrown, saying that __slots__ should be used instead. DataTree (and TreeNode and NamedNode) do define __slots__, but there are some attributes that are also declared dynamically (e.g., DataTree.children and DataTree.parent, which are first defined in DataTree.__init__). Because of these dynamic declarations, DataTree has both __slots__ and __dict__ and therefore fails the check in AttrAccessMixin.__init_subcass__.
This issue aims to update DataTree (and potentially NamedNode and TreeNode, if needed), such that DataTree can pass the check in AttrAccessMixin.__init_subclass__ and the additional TreeAttrAccessMixin class can be removed.
What is your issue?
In #9011 code from datatree was merged into the main
xarray/coresubdirectory. This includes theTreeAttrAccessMixinclass, which is inherited byDataTree. There is also a more generalAttrAccessMixinclass, which would be preferable to use instead.The reason that
AttrAccessMixinis not just used forDataTreeis thatAttrAccessMixin.__init_subclass__has a check to see if there is a__dict__attribute on the class. If there is, an error is thrown, saying that__slots__should be used instead.DataTree(andTreeNodeandNamedNode) do define__slots__, but there are some attributes that are also declared dynamically (e.g.,DataTree.childrenandDataTree.parent, which are first defined inDataTree.__init__). Because of these dynamic declarations,DataTreehas both__slots__and__dict__and therefore fails the check inAttrAccessMixin.__init_subcass__.This issue aims to update
DataTree(and potentiallyNamedNodeandTreeNode, if needed), such thatDataTreecan pass the check inAttrAccessMixin.__init_subclass__and the additionalTreeAttrAccessMixinclass can be removed.