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.