cache # >= 3.9
except NameError:
cache = lru_cache(maxsize=None)
+
+try:
+ cached_property # >= 3.8
+except NameError:
+ class cached_property:
+ def __init__(self, func):
+ update_wrapper(self, func)
+ self.func = func
+
+ def __get__(self, instance, _):
+ setattr(instance, self.func.__name__, self.func(instance))
+ return getattr(instance, self.func.__name__)