(Изображение из Адриан Сканкар )
Это не что-то сложное, но все равно очень полезно, чтобы не ждать или не подчеркивать вашу инфраструктуру … ничего!
Ленивая загрузка (и кэширование) атрибута
Идея состоит в том, чтобы иметь пустой атрибут, который получит его значение только при выходе в первый раз. Чтобы проиллюстрировать, я использовал класс Подарок с атрибутом Цена Это медленно, чтобы вычислить:
import time
class Gift():
_price = None
def __init__(self, what):
self.what = what
def costly_computation(self):
print("Costly computation")
time.sleep(2)
return 10
@property
def price(self):
if not self._price:
self._price = self.costly_computation()
return self._price
Дорогостоящие вычисления будут влиять только при доступе к атрибуту, и это произойдет только один раз (первый доступ) 😃
Увидеть это в действии
>>> from gift import *
>>> g = Gift("Sunglasses")
>>> g.price
Costly computation
# ...
# ... freezes a bit
# ...
10
>>> g.price
10
Это все 😙
Оригинал: “https://dev.to/thibaultduponchelle/python-lazy-loading-of-an-attribute-aij”