html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/issues/3582#issuecomment-559847335,https://api.github.com/repos/pydata/xarray/issues/3582,559847335,MDEyOklzc3VlQ29tbWVudDU1OTg0NzMzNQ==,6213168,2019-11-29T17:10:40Z,2019-11-29T17:10:40Z,MEMBER,"+1 to shoyer - encapsulation is by far the easiest approach.
>> Why can't you initialise whatever you need to upon first access?
> How do you do that?
```python
@xarray.register_dataset_accessor('foo')
class FooAccessor:
def __init__(self, xarray_obj):
self.obj = xarray_obj
#
self.x = something(xarray_obj)
@property
def bar(self):
# snip
def baz(self):
# snip
```
The accessor ``__init__`` method will be invoked by xarray the first time you invoke ``array.foo``.
Note, however, that it is not recommended to put expensive calculations in it, because the object will *possibly* be destroyed and reinitialised every time the array is transformed - or in other words, anything that is not a read-only method/property or a cell update.
I emphasized *possibly* because some transforms may not destroy and recreate your accessor instance, thus potentially causing it to be in a state that is incoherent with the attached xarray object. Every time you invoke a method, you should verify that whatever assumptions you relied upon to generate the state are still valid.","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,530062582
https://github.com/pydata/xarray/issues/3582#issuecomment-559606839,https://api.github.com/repos/pydata/xarray/issues/3582,559606839,MDEyOklzc3VlQ29tbWVudDU1OTYwNjgzOQ==,6213168,2019-11-28T21:36:39Z,2019-11-28T21:36:39Z,MEMBER,Give a careful read to #3268 if statefulness (beyond what can be stored in xarray variables) is important for you. ,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,530062582
https://github.com/pydata/xarray/issues/3582#issuecomment-559606279,https://api.github.com/repos/pydata/xarray/issues/3582,559606279,MDEyOklzc3VlQ29tbWVudDU1OTYwNjI3OQ==,6213168,2019-11-28T21:32:23Z,2019-11-28T21:32:23Z,MEMBER,"I would not advise subclassing. In most cases it should work but it's thoroughly untested and I would be unsurprised if you were to find a use case that accidentally reverts your subclass to the base class.
I don't think I fully understand your problem with accessors. Is it because you would need a hook that is triggered by ``DataArray. __init__``? Why can't you initialise whatever you need to upon first access? ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,530062582