Ce face functools.cached_property
@cached_property se comportă ca @property la prima citire: rulează metoda. Rezultatul este apoi salvat în obiect, iar citirile următoare îl returnează direct, fără recalculare.
Este potrivită pentru valori costisitoare care nu se schimbă după crearea obiectului. Valoarea memorată poate fi ștearsă cu del obiect.atribut, ca să fie recalculată la următoarea citire.
Parametri
| Parametru | Descriere |
|---|---|
func |
Metoda care calculează valoarea. |
Ce returnează
Un descriptor cached_property.
Exemple
Exemplul 1: Calcul făcut o singură dată
from functools import cached_property
class Raport:
def __init__(self, vanzari):
self.vanzari = vanzari
@cached_property
def total(self):
print(" (calculez totalul)")
return sum(self.vanzari)
r = Raport([120, 80, 300])
print(r.total)
print(r.total)
r.vanzari.append(100)
print(r.total)
del r.total
print(r.total)
Rezultat
(calculez totalul)
500
500
500
(calculez totalul)
600
Greșeli frecvente
- Folosești
cached_propertypentru o valoare care depinde de atribute modificabile. După modificare, valoarea memorată rămâne veche până o ștergi.
Comenzi înrudite
property(): Transformă o metodă într-un atribut calculat, cu verificare la citire și la scriere.functools.lru_cache() și functools.cache(): Memorează rezultatele unei funcții, ca apelurile repetate cu aceleași argumente să fie instantanee.class: Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).