Какие знаешь варианты 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`
Ленивая загрузка полезна для ресурсоемких операций, когда объект может не потребоваться.