#! /bin/env python3 # from errno import ENODATA from pathlib import Path from os import getxattr, setxattr class Path_(type(Path())): __slots__ = ("_new_attr",) def __new__(cls, *args, new_attr=None, **kwargs): self = super().__new__(cls, *args, **kwargs) self._new_attr = new_attr return self @property def new_attr(self): if self._new_attr: return self._new_attr try: new_attr = getxattr(str(self), "user.new_attr") except OSError as exc: if exc.errno != ENODATA: raise exc else: self._new_attr = new_attr return new_attr new_attr = b"something" # generate the new_attr setxattr(str(self), "user.new_attr", new_attr) self._new_attr = new_attr return new_attr # @classmethod # def _from_parsed_parts(cls, drv, root, parts, init=True): # self = cls.__new__(cls) # self._drv = drv # self._root = root # self._parts = parts # if init: # self._init() # return self if __name__ == "__main__": print(Path_("reproducer.py").parent.new_attr)