from copy import deepcopy from dataclasses import dataclass @dataclass class Base: symbol: str dirty: bool def __init__(self, symbol, store): self.symbol = symbol self.store = store self.dirty = True def seta(self, d, name): if name in d: setattr(self, name, d[name]) def __setattr__(self, name, value): if name != 'dirty': self.dirty = True super().__setattr__(name, value) def update(self, d): pass def dict(self): r = deepcopy(self.__dict__) del r['store'] del r['dirty'] return r def path(self): raise NotImplementedError('path') @classmethod def ext(self): raise NotImplementedError('extension') def type(self): return self.__class__.__name__ def __str__(self): return self.f() def f(self, detail=1): r = self.symbol if detail > 1: r += '.' + self.ext() return r