Source code for ndsampler.utils.util_misc

import ubelt as ub

[docs] class HashIdentifiable(object): """ A class is hash-identifiable if its invariants can be tied to a specific list of hashable dependencies. The inheriting class must either: * implement `_depends` * implement `_make_hashid` * define `_hashid` Example: class Base: def __init__(self): # commenting the next line removes cooperative inheritence super().__init__() self.base = 1 class Derived(Base, HashIdentifiable): def __init__(self): super().__init__() self.defived = 1 self = Derived() dir(self) """ def __init__(self, **kwargs): super(HashIdentifiable, self).__init__(**kwargs) self._hashid = None self._hashid_parts = None def _depends(self): raise NotImplementedError def _make_hashid(self): parts = self._depends() hashid = ub.hash_data(parts) return hashid, parts @property def hashid(self): if getattr(self, '_hashid', None) is None: hashid, parts = self._make_hashid() self._hashid = hashid return self._hashid