Какие знаешь варианты lazy loading

Python Middle Без компании
Какие знаешь варианты lazy loading
Ответы
В Python есть несколько способов реализации lazy loading (ленивой загрузки): - **Декораторы** ``` def lazy_property(fn): attr_name = '_lazy_' + fn.__name__ @property def _lazy_property(self): if not hasattr(self, attr_name): setattr(self, attr_name, fn(self)) return getattr(self, attr_name) return _lazy_property ``` - **Использование `__getattr__`** ``` class LazyLoader: def __init__(self, loader_func): self.loader_func = loader_func self._loaded = None def __getattr__(self, name): if self._loaded is None: self._loaded = self.loader_func() return getattr(self._loaded, name) ``` - **Генераторы** ``` def lazy_range(n): i = 0 while i < n: yield i i += 1 ``` - **Библиотеки** - `django.utils.functional.cached_property` - `werkzeug.utils.cached_property` Ленивая загрузка полезна для ресурсоемких операций, когда объект может не потребоваться.