Gli oggetti con riferimenti deboli non hanno attributi o metodi, ma permettono di ottenere il referente, se esiste ancora, chiamandolo:
>>> import weakref >>> class Object: ... pass ... >>> o = Object() >>> r = weakref.ref(o) >>> o2 = r() >>> o is o2 True
Se il referente non esiste pi�, una chiamata all'oggetto referente restituir� None:
>>> del o, o2 >>> print r() None
Per verificare che un oggetto con riferimento debole esista ancora, si
dovr� utilizzare l'espressione ref() is not None.
Normalmente, il codice di un'applicazione che necessita di usare un
riferimento ad un oggetto dovrebbe seguire questo modello:
# r � un oggetto con riferimento debole
o = r()
if o is None:
# il referente � stato inserito nella garbage collection
print "Oggetto allocato."
else:
print "Oggetto ancora vivo!"
o.do_something_useful()
L'utilizzo di un test separato per l'``esistenza in vita'' pu� dare luogo a delle interferenze in applicazioni che sfruttino i thread; un altro thread pu� provocare l'invalidamento di un riferimento debole prima che questo venga chiamato (dal thread attuale - NDT); l'esempio appena mostrato � sicuro sia in applicazioni multi thread che in applicazioni single thread.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.