Objetos de referência fraca

O Python oferece suporte a referências fracas como objetos de primeira classe. Existem dois tipos de objetos específicos que implementam diretamente referências fracas. O primeiro é um objeto de referência simples, e o segundo atua como um intermediário ao objeto original tanto quanto ele pode.

int PyWeakref_Check(PyObject *ob)

Return non-zero if ob is either a reference or proxy object. This function always succeeds.

int PyWeakref_CheckRef(PyObject *ob)

Return non-zero if ob is a reference object. This function always succeeds.

int PyWeakref_CheckProxy(PyObject *ob)

Return non-zero if ob is a proxy object. This function always succeeds.

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Retorna valor: Nova referência. Parte da ABI Estável.

Retorna um objeto de referência fraca para o objeto ob. Isso sempre retornará uma nova referência, mas não é garantido para criar um novo objeto; um objeto de referência existente pode ser retornado. O segundo parâmetro, callback, pode ser um objeto chamável que recebe notificação quando ob for lixo coletado; ele deve aceitar um único parâmetro, que será o objeto de referência fraca propriamente dito. callback também pode ser None ou NULL. Se ob não for um objeto fracamente referenciável, ou se callback não for um chamável, None, ou NULL, isso retornará NULL e levantará a TypeError.

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Retorna valor: Nova referência. Parte da ABI Estável.

Retorna um objeto de proxy de referência fraca para o objeto ob. Isso sempre retornará uma nova referência, mas não é garantido para criar um novo objeto; um objeto de proxy existente pode ser retornado. O segundo parâmetro, callback, pode ser um objeto chamável que recebe notificação quando ob for lixo coletado; ele deve aceitar um único parâmetro, que será o objeto de referência fraca propriamente dito. callback também pode ser None ou NULL. Se ob não for um objeto fracamente referenciável, ou se callback não for um chamável, None, ou NULL, isso retornará NULL e levantará a TypeError.

int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
Parte da ABI Estável desde a versão 3.13.

Get a strong reference to the referenced object from a weak reference, ref, into *pobj.

  • On success, set *pobj to a new strong reference to the referenced object and return 1.

  • If the reference is dead, set *pobj to NULL and return 0.

  • On error, raise an exception and return -1.

Adicionado na versão 3.13.

PyObject *PyWeakref_GetObject(PyObject *ref)
Retorna valor: Referência emprestada. Parte da ABI Estável.

Return a borrowed reference to the referenced object from a weak reference, ref. If the referent is no longer live, returns Py_None.

Nota

Esta função retorna uma referência emprestada para o objeto referenciado. Isso significa que você deve sempre chamar Py_INCREF() no objeto, exceto quando ele não puder ser destruído antes do último uso da referência emprestada.

Descontinuado desde a versão 3.13, será removido na versão 3.15: Use PyWeakref_GetRef() instead.

PyObject *PyWeakref_GET_OBJECT(PyObject *ref)
Retorna valor: Referência emprestada.

Semelhante a PyWeakref_GetObject(), mas não verifica erros.

Descontinuado desde a versão 3.13, será removido na versão 3.15: Use PyWeakref_GetRef() instead.

void PyObject_ClearWeakRefs(PyObject *object)
Parte da ABI Estável.

Esta função é chamada pelo tratador tp_dealloc para limpar referências fracas.

Isso itera pelas referências fracas para object e chama retornos de chamada para as referências que possuem um. Ele retorna quando todos os retornos de chamada foram tentados.