3.3.1 Oggetti con riferimenti deboli

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.