Рубрики
Без рубрики

Python ленивая загрузка атрибута

(Изображение из Адриана Сканкара) Это не что-то сложное, но все равно очень полезно, чтобы не ждать или … помечен с Python.

(Изображение из Адриан Сканкар )

Это не что-то сложное, но все равно очень полезно, чтобы не ждать или не подчеркивать вашу инфраструктуру … ничего!

Ленивая загрузка (и кэширование) атрибута

Идея состоит в том, чтобы иметь пустой атрибут, который получит его значение только при выходе в первый раз. Чтобы проиллюстрировать, я использовал класс Подарок с атрибутом Цена Это медленно, чтобы вычислить:

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”