Cached property
Інколи поле об’єкта, до якого потрібно отримувати доступ, дуже довго обраховується і щоб кожного разу не викликати дорогу операцію, можна його закешувати. Наприклад
1 | class Car(object): |
Щоб отримати деяку властивість інколи потрібно багато рахувати або здійснювати запит до стороннього сервісу. Якщо вважати, що після цього дана властивість не буде змінюватися, можна скористатися простим декоратором:
1 | from functools import wraps |
Він збереже результат викликаної функції в атрибут об’єкта і таким чином наступні рази доступ буде відбуватися до уже порахованих даних.
Щоб отримати більший контроль, можна скористатися готовою бібліотекою cached-property. Вона дозволяє кожного разу не копіювати даний код собі у проект, дає змогу інвалідувати кеш, працює з тредами, можна навіть встановлювати таймаути.