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-559860016,https://api.github.com/repos/pydata/xarray/issues/3582,559860016,MDEyOklzc3VlQ29tbWVudDU1OTg2MDAxNg==,17710617,2019-11-29T18:24:49Z,2019-11-29T18:24:49Z,CONTRIBUTOR,"Ok thanks for the recommandations. I'm thinking of using this kind of class to handle object creation: ```python import xarray as xr import motion class Analogs: def __new__(cls, ...): array = xr.DataArray(...) cls.verify(array) return array @staticmethod def verify(array): print(""verification..."") @classmethod def from_csv(cls, filename:str, ...): array = xr.DataArray(filename, ...) cls.verify(array) return array ``` Let's say I define another `Markers` class for another type of data. Is it possible that my accessor exposes different functions according to class e, g: ```python @xr.register_dataarray_accessor(""foo"") class DataArrayAccessor(object): def __init__(self, xarray_obj: xr.DataArray): self._obj = xarray_obj def to_csv(self): """""" This function is exposed to all objects but behave differently if it is a Markers or an Analogs """""" def marker_only_function(self): """""" This function is only exposed to array created with the Marker class """""" def analog_only_function(self): """""" This function is only exposed to array created with the Analog class """""" ``` My ultimate goal is to have this kind of API: ```python analogs = ( Analogs.from_csv(""filename.csv"") .foo.center() # foo accessor generic method .foo.rectify() # foo accessor specific method for Analogs object .mean() # xarray method ) ```","{""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-559607756,https://api.github.com/repos/pydata/xarray/issues/3582,559607756,MDEyOklzc3VlQ29tbWVudDU1OTYwNzc1Ng==,17710617,2019-11-28T21:44:08Z,2019-11-28T21:44:08Z,CONTRIBUTOR,"> Is it because you would need a hook that is triggered by DataArray. __init__ Yes, I need to test some properties when creating the `DataArray` such as shape and dimensions properties. > Why can't you initialise whatever you need to upon first access? How do you do that?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,530062582